学习Nginx_HTTP_Server

1 工作环境

1.1 设置终端仿真器

​ 首先得安装SSH客户端,这是一种网络协议,实现两个设备的加密与安全通信,是用于远程连接系统的shell

1.2 建立会话

  • 准备连接主机名或ip地址

  • ssh守护进程端口号,除非额外指定,否则默认22

  • 账号

  • 密码

1.3 程序和进程

命令后面加上&,可以让命令在后台运行,进程pid会显示在屏幕上,一旦完成会显示执行完毕信息

1.4 系统服务

许多后台应用程序用service命令来启动,通常用复杂的脚本来控制启动和停止,普遍放在/etc/init.d中

	**start**		启动服务

​	**stop**		以clean way方式停止服务

​	**restart**	重新启动服务

​	**reload**	重新装载服务配置文件

​	**status**	显示服务器状态

​	**service --status-all**	列出所有服务器当前状态 

1.5 杀进程

	**kill [pid]**	杀死指定进程

​	**kill -9 [pid]**	强制杀死

​	**killall httpd**	杀死apache所有进程

1.6 符号链接和硬链接

	可通过符号链接读取被链接的文件,若删除该链接,目标文件不受影响

​	硬链接链接文件的数据表现为多个链接可以链接到存储器同一数据,任意一个链接删除后数据不受影响,直到最后一个数据删除后数据才会被删除

​	

1.7 磁盘空间

	df	查询驱动器可用空间	-h	以人类可读方式

​	du	磁盘使用量	-h	以人类可读方式

​	free	空闲内存

2 下载和安装Nginx服务器

下载指令
yum Red Hat yun install
apt Debian和Unbuntu apt-get install
yast SuSE Linux

PRCE(Perl Compatible Regular Expression) Nginx的Rewrite和HTTP核心模块会用到PRCE正则表达式的语法,需要安装prce和prce-level两个包

用户和组 由root账户启动的nginx进程允许开放任意端口,但其他用户只能监听1024以上的端口


3 Nginx的基本配置

3.1 配置文件的语法

配置指令 Nginx的配置文件被描述为一个具有一定逻辑结构的一组指令列表,应用程序的行为通过修改这些指令值即可实现,Nginx的主要配置文件为nginx.conf

# 代表后面的内容是注释
worker_processes 后面的数字代表工作的进程数
指令用;结尾
user 指定两个字符串,一个是用户账户,第二个是用户组
Nginx通过模块来构建,每一个模块提供一组指令
includes 执行对特定文件的包含,可使用通配符*

3.2 指令块

​ 指令由模块提供,如果你激活一个新模块,便会有一组新的指令变得有效,如:

​ **events {
​ worker_connections 1024;
​ } **

​ 这个event块可以在默认配置文件中找到,来自events模块,该模块提供的指令只能在该区段使用,一些文件可以放置在文件根部,这些文件的配置能够全局使用

​ 在某些情况下,不同区段能够相互嵌套,如:

http {
​ server {
​ listen 80;
​ server_name example.com;
​ access_log /var/log/nginx/example.com.log;
​ location ^~ /admin/ {
​ index index.php;
​ }
​ }

}

​ 这个http区段可以声明一个或多个http区段,一个server区段允许配置一台虚拟主机,例子中的server区段包含一些配置,这些设置通过主机http头应用于所有的请求以便于正确配置example.com。在这个server区段内,可插入一个或多个location区段,当需要对特定路径的URL进行匹配时,这些location区段允许你对这些路径进行单独设置。最后最重要的是配置的继承,在区段中嵌套其他区段,被嵌套的区段会继承父区段的配置,access_log指令由server区段定义(如上),指定对这个服务的所有http请求都会记录在这个文本文件中,这个条件会被location继承,当然可以通过下面设置来禁用继承:

location ^~ /admin/ {
​ index index.php;
​ access_log off;
​ }

​ 这样,日志虽然不记录/admin/,但其他访问日志仍然会记

3.3 高级语言规则

rewrite^/(.*)\.(png|jpg|gif)$/image.php? file=$1&format=$2 last; listen指令一般只支持一个端口号,用来打开监听套接字,location和rewrite接受一些更复杂的指令,允许你在配置文件中使用更高级的结构,如:if、set、break和return

​ 指令单位:k或K 千字节 m或M 兆字节
client_max_body_size 2M;
client_max_body_size 2048K;
ms 毫秒
s
m 分钟
h 小时
d
w 星期
M
y
​ 默认时间为s
client_body_timeout 180(s)

变量 模块提供各种变量,http模块中定义了 n g i n x v e r s i o n 变 量 , 一 些 指 令 不 允 许 使 用 任 何 变 量 , e r r o r l o g l o g s / e r r o r − nginx_version变量,一些指令不允许使用任何变量,error_log logs/error- nginxversion使errorloglogs/errornginx_version.log
字符串值 可以没有引号,但是如果含有空格符、分号或花括号则需要单引号或双引号

3.4 基本模块指令

基本模块 定义nginx基本功能的变量,编译时不能被禁用,总是有效,有以下三种:核心模块(基本特征和指令)、事件模块(配置网络使用)、配置模块(提供包含机制)
nginx进程结构 应用程序虽然是二进制文件,但运行时功能却相当复杂,启动nginx独一无二的进程存在内存master进程,该服务在启动时有init脚本启动,它会使用当前用户和用户组运行,通常为root/root,master进程本身不出来用户请求,只是用来产生worker进程,worker进程按照配置文件运行,可定义大量worker进程和worker进程最大连接数
核心模块指令 大部分放在配置文件的根部,且只能使用一次,指令如下:
daemon on或off,启用或关闭守护进程,禁用时不能在后台使用,shell运行时将保留在前端
debug_points stop或abort,激活调试点,调试点为了附加调试点改变方向用stop打断程序,用abort放弃调试点并建立内核转储文件
env 重新定义环境变量,env VAR;或env VAR=value;
error_log error_log /file/path level,默认值 logs/error.logs error,level分为debug、info、notice、warn、error和crit,debug提供全部日志,crit提供关键日志
lock_file lock_file logs/nginx.lock,默认不使用,使用lock为了互斥
log_not_found on或off,开启或关闭记录404错误
master_process on或off,on将开启多进程,一个master进程和多个worker进程,禁用则只有master进程
pid pid logs/nginx.pid,存放nginx守护进程的pid路径
ssl_engine ssh_engine enginename,启用ssl硬件加速器
thread_stack_size 线程堆栈大小
time_resolution 时钟同步时间
user user [groupname] 定义用户和用户组
worker_threads 每个worker进程定义一定数量的线程
worker_cpu_affinity work_cpu_affinity 0101 1010 将第一个worker绑定在cpu0和2上,第二个worker绑定在cpu1和3上
worker_priority -20(最高级)到19(最低级),内核程序运行在-5优先级
worker_processes worker进程数量
worker_rlimit_core 每个worker进程内核文件的大小
worker_rlimit_nofile 每个worker能同时处理的文件数量
​ **worker_rlimit_sigpending **每个用户能被排入队列的信号数量,如队列满,信号会被忽略
​ **working_directory **worker工作进程的目录,仅用于定义core文件的位置

Events模块
accept_mutex on或off,启用或禁用互斥锁进行套接字监听
​ **accept_mutex_delay **worker进程尝试再次获取资源等待的时间
​ **debug_connection **ip地址或CIDR段,记录详细信息到error_log指定文件中,开启debug 级别详细日志
​ **muti_accept **on或off,nginx是否接受所有监听队列进入的连接
​ **use **选择event模型类型,和系统相关,nginx会自动选择最合适的一个
worker_connections worker进程同时连接的数量

​ **Configuration模块 **
​ 提供include指令,可在任何地方插入该指令,该指令后面参数为文件路径

3.5 适合你需求的配置文件

​ 主配置文件为nginx.conf,但是这个文件几乎是空的,当一个指令没有出现在文件中时会使用其默认值

必要的调整

user root root root用户授予全部权限是很危险的,一般需要建立新的用户和组
​ **worker_processes 1 **所有的请求分配给cpu一个进程,加入cpu是4核,则最好设置为4
worker_priority 0 worker进程以一个适当的优先级启动
​ **log_not_found on **记录404错误
​ **worker_connections 1024 **每个过程进程能接受1024个连接

3.6 测试服务器

建立测试服务器 为了执行简单测试,通过浏览器访问web服务器,需要为nginx创建一个访问站点,默认安装包内有简单的测试页,/usr/local/nginx/html/index.html,nginx.conf中也包含对其的访问

nginx以这个部分为基础提供网络服务:

  • 通过80端口监听tcp套接字
  • 访问地址 http://localhost/
  • 主页为index.html

三个评测服务器性能的工具:
​ - httperf
​ - autobench
​ - OpenWebLoad

​ 这些测试工具的原理都是发送大量的http请求进行测试

httperf httperf --server 192.168.1.10 -port 80 --uri /index.html --rate 300 --num-conn 30000 --num-call 1 --timeout 5

  • –server 测试的网址名

  • –uri 指定下载的文件

  • –rate 每秒发送的请求

  • –num-conn 连接的总数

  • –num-call 每个连接发送的请求数

  • –timeout 超时时间

    autobench autobench --single_host --host1 192.168.1.10 --uri1 /index.html --quiet --low_rate 20 --high_rate 200 --rate_step 20 --num_call 10 --num_conn 5000 --timeout 5 --file results.tsv

       - --host1 测试网站的名称 
       - --uri1 指定下载的文件
       - --quiet 不在屏幕上显示httperf的信息
       - --low_rate 测试开始时每秒连接数
       - --high_rate 测试结束时每秒连接数
       - --rate_step 连接数在每一次测试后的增长频率
       - --num_call 每个连接发送的请求数
       - --num_conn 连接总数
       - --timeout 超时时间
       - --file 将测试结果导出到一个指定文件夹,.tsv
    

OpenWebLoad openload example.com/index.html 10

		- TPS(每秒处理数)  一个处理相当于一个完整的请求(一个来回)
		- MaTps   过去20秒TPS的平均值
		- Resp Time  过去一秒的平均值
		- Err(错误率)服务器返回的响应不是200时,会发生错误
		- Count   处理的总数

4 HTTP配置

4.1 HTTP核心模块

​ HTTP核心模块包含HTTP服务器所有基本的区段、指令和变量,HTTP模块提出了三个新的逻辑区块:

  • http 该区域嵌入配置文件的根部,此块允许定义指令和嵌入HTTP相关模块的区段,此块可以插入多次,但后者会取代前者

  • server 此块可以声明一个站点,通过设置可以让nginx服务器实现你写的配置

  • location 定义一组设置,应用于网站的特定位置,能用于server区段,也能嵌套在其他location区段

    通过HTTP区段,涵盖这个Web配置,包含一个或多个server区段,定义了域和子域,对于这些站点来说,你定义的location区段将额外的配置添加给特定的URI请求

4.2 模块指令

​ 上面三个层次都可以插入指令,有些指令不能应用于某些级别,location区域插入一个server_name指令是不合理的

4.3 套接字和主机的配置

listen:server listen [address] [:port] [其他选项];网站一般在80端口提供服务,其他选项中default:指该server区段被用于默认的网站,在该ip地址和端口上接受任何客户端的请求 ;ssl:指定网站提供SSL服务;
​ **sever_name:server *接收主机名与hostname相匹配,可以使用通配符
server_name_in_redirect: http、server、location on或off,开启时将使用server_name指令中的第一个主机名进行重定向,关闭时使用host的值进行重定向
server_name_hash_max_size: http nginx用hash表来进行变量数据收集,加速请求进程,存储服务器名称数量hash表的最大值
​ **server_names_hash_bucket_size: http **服务器名称hash表的一个条目的最大长度
​ **port_in_redirect: http、server、location **on或off,是否将端口重定向后的端口添加到URL中
​ **tcp_nodelay: http、server、location **on或off,禁用Nagle缓冲算法(合并一定数量的要发送的数据之后再发送数据)
​ **tcp_nopush: http、server、location **on或off,单个TCP数据包中发送整个HTTP的响应头
​ **sendfile:http、server、location **on或off,使用sendfile内核来调用处理文件,禁用时靠nginx自身处理文件
​ **sendfile_max_chunk:http、server **sendfile每一次调用数据的最大值
​ **send_lowat:http、server **用做输出操作缓冲区的大小
​ **reset_timedout_connection:http、server、location **on或off、启用该功能后,当客户端超时,清除相关信息

4.4 路径与文档

​ **root:http、server、location **定义文档根目录,root 目录路径
​ **alias:location **为nginx提供路径别名,为指定的请求找到文件
​ **error_page:http、server、location、if **修改访问URI所产生的HTTP响应码替换为其他代码或其他地址,如:error_page 404 /not_found.html
​ **if_modified_since: http、server、location **off、exact或before。off会忽略header、exact会将header时间(上一次爬取页面的时间)和时间文件修改时间匹配,若相同则返回304 Not Modified,若header时间在实际修改时间之后,返回200 OK,before若header时间在被修改日期之前或一样,则返回304 Not Modified
​ **index:http、server、location **定义一个默认页面,如果请求中没有指定文件名,nginx会使用该页面提供服务,可以指定多个文件名,但返回的页面是第一个找到的页面,默认值index.html
​ **recursive_error_pages:http、server、location **on或者off,error_page提供的错误页面本身发生了错误,error_page会被递归调用。开启或关闭递归错误页面
​ **try_files:location **试图找指定的文件,如果指定的这些文件或存在的文件都不是,就跳到命名locction区段或者指定URI
location / {
try_files $uri $uri.html $uri.php $uri.xml
}
​ 在这个例子中,如果nginx设法正常提供文件,请求的uri找不到就添加html,再找不到就添加php,再找不到就添加xml,再找不到就换一个location

4.5 客户端请求

​ **keepalive_requests:http、server、location **设置单个keep_alive连接的最大请求数
​ **keepalive_timeout:http、server、location **keep_alive的有效时长,这段时间内不需要重新建立连接,第二个参数是让一段时间过去后,客户端浏览器自身关闭连接
​ **send_timeout:http、server、location **设置超时时间,一旦超过这个设置的时间,nginx会关闭不活动的连接
​ **client_body_in_file_only:http、server、location **off或clean或on,开启该指令会将请求头主体存储在磁盘中(不推荐),off是关闭,clean是处理完请求后移除
​ **client_body_in_single_buffer:http、server、location **on或off,将客户端请求主体存储在单一的缓存区中
​ **client_body_buffer_size:http、server、location **客户端请求主体的缓存大小,如果超过这个大小,主体将被写到磁盘
​ **client_body_temp_path:http、server、location **定义临时文件的路径,用于存储客户端请求主体
​ **client_body_timeout:http、server、location **读取客户请求主体时、定义非活动的超时间隔(超过这个时间就认为不是正常的活动连接)
​ **client_header_buffer_size:http、server、location **nginx将缓冲区分给请求头的大小
​ **client_header_timeout:http、server、location **读取客户端请求头时、定义不活动超时的时长
​ **client_max_body_size:http、server、location **利用指令定义客户端请求体的最大值,超过这个值,客户端会返回413请求实体体积太大的错误
​ **large_client_header_buffers:http、server、location **定义数量和缓冲区的大小,存储客户端的请求,large_client_header_buffers 4 4K,定义4个缓冲区大小为4K的缓存
​ **lingering_time:http、server、location **nginx发送错误响应到关闭连接前的时间
​ **lingering_timeout:http、server、location **客户端关闭前,两个读操作之间的等待时间
​ **ignore_invalid_headers:http、server **on或off,如果禁用该指令,nginx会返回400错误请求,避免请求头被错误形成

4.6 MIME类型

​ **types:http、server、location **允许在MIME类型和文件扩展名之间建立联系,application/octet-stream:下载而并非显示它,text/plain:纯文本而非html解释,include mine.types包含基本类型,如果一些扩展名是公知的如:.html和.txt,浏览器会忽略MIME类型,仍然显示文件
​ **default_type:http、server、location **默认MIME类型,nginx提供一个文件时,如果该文件扩展名和MIME文件声明类型匹配,则返回MIME值,将值填入http响应头Content-Type部分,如果不匹配,该值由default_type提供
​ **types_max_hash_size: http、server、location **MIME类型hash表中最长的一个条目

4.7 限制和约束

​ **limit_except:http、server、location **limit_except GET,只允许使用GET方法
​ **limit_rate:http、server、location **允许个别客户进行传输率限制
​ **limit_rate_after:http、server、location **limit_rate生效之前传输数据的总数
​ **satisfy:location **all或any,默认为all,客户端是否需要所有访问条件都生效或至少一个有效才被允许访问
​ **internal:location **只允许内部访问

4.8 文件处理和缓存

​ **direction:http、server、location **大小值或off,如果开启需要一个值,大于指定值的文件将通过Direct I/O系统读取,与sendfile不能同时用
​ **open_file_cache:http、server、location **允许启用缓存,存储打开文件的相关信息而不是文件本身
​ **open_file_cache_errors:http、server、location **开启或禁用缓存文件错误
​ **open_file_cache_min_uses:http、server、location **该指令定义条目总访问次数,open_file_cache在一段时间后清除无活动的条目,如果访问次数超过条目总访问次数,则条目将变为永久活动条目且不被移除
​ **open_file_cache_vaild:http、server、location **缓存重新有效前nginx将等待的时间

4.9 其他指令

​ **log_not_found:http、server、location **开启或禁用404(没有找到的HTTP错误)
​ **log_subrequest:http、server、location **启用或禁用子请求
​ **merge_slashes:http、server、location **启用该指令具有合并多个连续斜线的效果
​ **msie_padding:http、server、location **开启时响应错误码为400或更高值时会将响应体填充到512字节
​ **msie_refresh:http、server、location **开启时当响应码为301或302时,会将请求定义到一个新位置
​ **resolver:http、server、location **指定域名服务器,将主机名解析到ip
​ **resolver_timeout:http、server、location **域名查询超时时间
​ **server_tokens:http、server、location **允许nginx告知客户端它的版本号
​ **underscores_in_headers:http、server **http头名称中启用或禁用下划线
​ **variables_hash_max_size:http **变量hash表存放的最大数目
​ **variables_hash_bucket_size:http **变量hash表中变量的最大长度
​ **post_action:http、server、location、if **请求完成后的动作

4.10 模块变量

4.10.1 请求头

​ ** h t t p h o s t ∗ ∗ H T T P 头 部 h o s t 的 值 , 客 户 端 设 法 到 达 的 主 机 名 ​ ∗ ∗ http_host **HTTP头部host的值,客户端设法到达的主机名 ​ ** htt

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值