Nginx [engine x] is an HTTP and reverse proxy server, a mail proxy server, and a generic TCP/UDP proxy server.
安装
RedHat
1 | |
也可以先安装相关依赖,然后再安装nginx
1 | |
Debian
Deepin 15.11 64 bit
1 | |
命令
1 | |
启动
1 | |
reload
不中断当前服务的情况下,优雅的重新加载配置并生效。
1 | |
quit
优雅停机
stop
快速停机
reopen
新打开日志文件
当日志文件很大了,先移走原日志文件,此时日志依然在向里面写入,然后reopen新开一个日志文件。
比如:
1 | |
user
Defines user and group credentials used by worker processes.
1 | |
非root用户启动会报如下警告,这是因为1024以下端口只有root才有权限,如果端口1024以上,则可忽略此警告。
1 | |
work_processes
nginx has one master process and several worker processes.
The main purpose of the master process is to read and evaluate configuration, and maintain worker processes.
Worker processes do actual processing of requests.
日志
log_format
1 | |
access_log
格式:access_log path [format] [gzip=level] [buffer=size] [flush=time]
1 | |
error_log
1 | |
虚拟主机
基于端口、ip或域名构建一个主机服务。nginx中server代表一个虚拟主机。
基于端口
1 | |
基于IP
1 | |
基于域名
1 | |
server_name支持通配符(*)和正则表达式,优先级为精准匹配>以通配符开始的匹配>以通配符结束的匹配>正则匹配。例如:
1 | |
default_server
目录列表
当index指令对应的文件不存在时,默认报错403 Forbidden,可以开启目录列表支持。
1 | |
http反向代理
1 | |
1 | |
socket/ftp等反向代理
1 | |
load balance
round_robin
轮训,默认
ip_hash
1 | |
least_conn
1 | |
weight
1 | |
proxy_pass
语法规则:proxy_pass URL
当URL中不含URI时,比如:http://192.168.78:8080,Nginx服务器不会改变原有地址的URI。
当URL中含有URI(port后面的/也是uri)时,比如:http://192.168.78:8080/和http://192.168.78:8080/index,Nginx服务器会使用proxy_pass中的URI替换原地址URI中的location部分,比如:访问http://192.168.1.1/proxy/test.html时,
1 | |
1 | |
1 | |
1 | |
当location为正则匹配时,URL中不能包含uri
location
基于URI匹配,详情参见官方说明
语法规则:location [=|~|~*|^~] pattern { … }
=:精确匹配,比如= /、= /abc,优先级最高
^~:表示前缀普通匹配,优先级在正则匹配之前,一旦匹配成功,则不再去尝试正则匹配,比如:^~ /abcde/
~:表示区分大小写的正则匹配,比如:~ \.jps$
~*:表示不区分大小写的正则匹配,比如:~* \.jps$
uri:表示前缀普通匹配,优先级在正则匹配之后,比如:/,/abcde/,/abcde/abc/
/:通用匹配,如果没有其它匹配,任何请求都会匹配到
普通匹配与定义顺序无关,与长度有关,优先匹配更长的
正则匹配与定义顺序相关
子文件
1 | |
file表示文件,mask表示目录,可以使用通配符。
rewrite
rewrite用于重写或重定向。
1 | |
flag取值:
| 参数值 | 说明 | |
|---|---|---|
| last | 终止rewrite,继续匹配其他规则 | 用于重写 |
| break | 终止rewrite,不再继续匹配其他规则 | 用于重写 |
| redirect | 临时重定向,返回的HTTP状态码为302 | 用于重定向 |
| permanent | 永久重定向,返回的HTTP状态码为301 | 用于重定向 |
比如:
1 | |
proxy_redirect
proxy_redirect http:// https://;
变量
$host
proxy_set_header Host $host; $host就是代理服务器,也就是客户端请求的host
$proxy_host
proxy_set_header Host $proxy_host; $proxy_host就是服务器自己
$proxy_port:代表服务器自己的服务端口
$remote_addr
$http_x_forwarded_for
$proxy_add_x_forwarded_for
$scheme
1 | |
alias
1 | |
Q&A
302
nginx配置
1 | |
spring boot中新增配置
1 | |
如果nginx的ip地址不在范围(10/8,192.168/16,169.254/16,127/8,172.16/12和0:0:0:0:0:0:0:1|::1),则需要而外配置,比如:
1 | |