原文链接
摘要: nginx模块配置案例 nginx配置文件格式 nginx日常配置
基本HTTP服务
高级HTTP服务
邮件代理服务器
信号 | 作用 |
---|---|
TREM或INT | 快速停止Nginx服务 |
QUIT | 平缓停止Nginx服务 |
USR1 | 平缓重启 |
USR2 | 重新的打开日志文件 |
WINCH | 平滑升级 |
TREM或INT | 平滑停止worker process,用于nginx服务器平滑升级 |
nginx -s 参数
或者 systemctl
来管理.oldbin
变为nginx.pid.old
文件,然后执行新版本nginx服务器的二进制文件启动服务.如果启动成功,系统中将有新旧两个nginx服务共同提供web服务,之后,需要向旧的nginx服务进程发送WINCH
信号,使旧的nginx服务平滑停止,并删除nginx.pid.oldbin
文件. user nginx; #全局有效
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024; #只在events中有效
}
http { #以下指令在http部分中生效
include /etc/nginx/mime.types;
default_type application/octet-stream;
...
}
nginx.conf文件结构
... #全局块
events{} #events块
http{ #http块
... #http全局块
server{ #server块
... #server全局块
location [/]{ #location块
...
}
}
}
...
/etc/nginx/nginx.conf
下
user
表示谁有权使用nginx服务group
表示哪个用户组可以使用nginx服务user nobody nobody
配置允许生成的worker process数语法为 : worker_process number|auto;
number
指定nginx进程最多可以产生的worker process数.默认为 1auto
nginx 自动检测/etc/nginx/nginx.conf
下pid [path];
即可error_log [path] [debug|info|notice|warn|error|crit|alert|emerg]
include [path]
为了解决上述问题,当accept_mutex
开启时,将会对多个nginx进程接收连接进行序列化,防止多个进程对连接的争抢
accept_mutex on | off
默认为on
每个worker process都有能力同时接收多个新到达的网络连接
multi_accept on|off;
语法:use method
method
的选择有: select
`pollkqueue
epollrtsig
/dev/poll`eventport
设置允许每一个worker process同时开启的最大连接数
worker_connections number
默认是512/etc/nginx/nginx.conf
下里面的两行内容
include /etc/nginx/mime.types;
default_type application/octet-stream;
也就是访问日志和日志格式的格式化问题access_log
和 log_format
access_log
语法: access_log path [format[buffer=size]]
log_format
定义好的字符串,可选access_log off;
log_format
用于定义日志格式,并只能在http块中配置语法:sendfile on|off
默认是off
语法:sendfile_max_chunk size
size默认为0
语法:keepalive_timeout timeout[header_timeout]
header_timeout:在报文头部的Keep_Alive设置超时时间
用于限制用户通过某一连接向nginx服务器发送请求的次数
keepalive_request number
默认100listen *:80 | *:8000
其他用法
listen 192.168.1.10:8000; #监听ip上端口的链接
listen 192.168.1.10; #监听ip上所有端口的链接
listen 8000; #监听具体端口上的所有ip连接
listen 192.168.1.10 default_server backlog=1024;#设置ip的连接请求默认由虚拟主机处理,并允许最多1024网络连接同时处于挂起状态
设置了主机的名称并配置好DNS,用户就可以使用这个名称向此虚拟主机发送请求了
语法:server_name name {...}
虚拟主机名的匹配优先级
将一块网卡设置别名
ifconfig eth1:0 192.168.1.31 netmask 255.255.255.0 up
ifconfig eth1:1 192.168.1.32 netmask 255.255.255.0 up
/etc/rc.local
中配置文件
server {
listen 80;
server_name 192.168.1.31;
location / {
root /vagrant;
index index.html index.htm;
}
}
server {
listen 80;
server_name 192.168.1.32;
location / {
root /vagrant;
index index.html index.htm;
}
}
语法:location [=|~|~*|^~] uri {...}
=
:表示严格匹配~*
:用于表示uri包含正则,并且不区分大小写^~
:用于标准uri前,要求nginx服务器找到标识uri和请求字符串匹配度最高的location后,立即使用此location处理请求语法:root path
:path为nginx服务器接收到请求后查找资源的根目录路径
location /data/{
root /locationtest;
}
/data/index
可以匹配成功语法:alias path
: alias指令改变location接收到的URI的请求路径
location ~ ^/data/(.+\.(html|htm}))$ {
alias /locationtest/other/$1;
}
/data/index.html
匹配成功后,在/locationtest/other
路径下寻找资源文件index file;
语法:error_page code ...[=[response]] uri
案例
error_page 404 /404.html
:页面找不到,报404错误,映射到404.html响应error_page 403 http://some.com/s.html
:设置nginx服务器使用指定路径的页面响应403错误error_page 410 =301 /empty.gif
:设置nginx服务器产生410的http消息时,使用nginx安装路径/html/empty.gif返回给用户端301消息上面的页面的所有的返回路径都是基于nginx的安装目录来说的相对路径,如果想自定义路径,只需要另外使用一个location指令定向错误页面到新路径下就可以了
error_page 404 /404.html
location /404.html{
root /myserver/myerror
}
allow address | CIDR | all
:设置允许访问Nginx的客户端IP
CIDR
:允许访问的客户端的CIDR地址,例如202.80.18.23/25表示,前面是32位IP地址,后面/25表示该IP地址中前25位是网络部分,其余代表主机部分deny address | CIDR | all
:设置禁止访问Nginx的客户端IP
location /{
deny 192.168.1.1;
allow 192.168.1.0/24;
deny all;
}
#192.168.1.0是可以访问的,因为nginx配置在解析的过程中,遇到deny指令或者allow是按照顺序对当前客户端的链接进行访问权限检查的
auth_basic string|off
:用于开启或关闭该认证功能
auth_basic_user_file file
: 用于设置包含用户名和密码信息的文件路径 htpasswd -c -d /vagrant/pass test
test是用户名,这是linux自带的工具,回车后,要求输入用户名对应的密码. [root@myNginx ~]# cat /etc/nginx/conf.d/default.conf
server {
listen 80;
server_name localhost; #访问的域名
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html; #nginx 的默认的html文件存放位置
index index.html index.htm; #默认页面
}
#error_page 404 /404.html; #错误页面
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html; #拦截错误码 转发到对应页面
location = /50x.html {
root /usr/share/nginx/html; #错误码对应的页面的存放的位置
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
[root@myNginx ~]#
curl -v 可以查看请求和响应的头信息
[root@myNginx html]# curl -v www.baidu.com
* About to connect() to www.baidu.com port 80 (#0)
* Trying 61.135.169.121...
* Connected to www.baidu.com (61.135.169.121) port 80 (#0)
> GET / HTTP/1.1 request请求方式 请求协议
> User-Agent: curl/7.29.0 request
> Host: www.baidu.com
> Accept: */*
>
< HTTP/1.1 200 OK response响应返回
< Accept-Ranges: bytes
< Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
< Connection: Keep-Alive
< Content-Length: 2381
< Content-Type: text/html
< Date: Sat, 04 Aug 2018 06:32:44 GMT
< Etag: "588604c4-94d"
< Last-Modified: Mon, 23 Jan 2017 13:27:32 GMT
< Pragma: no-cache
< Server: bfe/1.0.8.18
< Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
<
...
* Connection #0 to host www.baidu.com left intact
[root@myNginx html]#
nginx模块分:nginx官方模块和第三方模块
nginx -V 中的 --with-http_stub_status_module
Nginx客户端的状态
配置
语法: stub_status;
默认是没有配置的
Context:server-locaiton之间配置
在 /etc/nginx/conf.d/default.conf
里,server
下加入
server{
...
location /qidia {
stub_status;
}
...
}
nginx -t -c /etc/nginx/nginx.conf
nginx -s reload -c /etc/nginx/nginx.conf
页面访问ip/(location后的 /qidia)
: 192.168.43.201/qidia
,显示如下
Active connections: 1 #nginx当前活跃的连接数
server accepts handled requests
8 8 7 #nginx接受的握手的总次数,nginx处理的连接数,总请求数 : nginx接受的握手的总次数==nginx处理的连接数表示nginx没有丢失
#总共处理了8个连接 , 成功创建8次握手, 总共处理了7个请求
Reading: 0 Writing: 1 Waiting: 0
#reading — 读取客户端的连接数.
#writing — 响应数据到客户端的数量
#waiting — 开启 keep-alive 的情况下,这个值等于 active – (reading+writing), 意思就是 Nginx 已经处理完正在等候下一次请求指令的驻留连接.
nginx -V 中的 --with-http_random_index_module
目录中随机选择一个主页作为一个随机主页
配置
语法:random_index on|off;
默认是关闭的
Context:location中
在/etc/nginx/conf.d/default.conf
里,只能在location
中加入
location / {
random_index on; #开启random_index
root /usr/share/nginx/html; #指定随机访问的页面的存放位置
#index index.html index.htm; #注释掉原有的index页面
}
.
开头的文件是不会作为随机页面作为访问的nginx -V 中的 --with-http_sub_module
HTTP内容替换
配置
语法:sub_filter string replacement #string要替换的内容, replacement替换后的内容
默认不开
Context:http,server,lication #如果加载http下面可以完成对多个server的内容替换
语法:sub_filter_last_modified on|off;
默认关闭
Context:http,server,location
语法:sub_filter_once on|off;
默认开启 #on只匹配第一个.off会把html的全部内容都匹配一次
Context:http,server,location
在/etc/nginx/conf.d/default.conf
里,如下
location / {
root /usr/share/nginx/html;
index index.html index.htm;
sub_filter 'nginx' 'qidai'; #将nginx替换成qidai
sub_filter_once off; #全局替换
}
sub_filter_once
on 就只匹配第一,替换第一个