Nginx(2)常用配置解析
安装文件夹
主配置文件会默认把这个文件夹中所有的子配置项都引入path/nginx/conf.d/
`是子配置存放处,
`path/nginx/conf/nginx.conf
静态文件夹都放在这个文件夹,也可以根据习惯放在其他位置path/nginx/html
常用命令
nginx -s reload #向主进程发送信号,重新加载配置文件,热重启
nginx -s reopen #重启Nginx
nginx -s stop #快速关闭
nginx -s quit #等待工作进程结束完成过后关闭
nginx -T #查看当前Nginx最终的配置
nginx -t #检查配置是否有问题
Nginx核心配置
# main段配置信息
user nginx; # 运行用户,默认即是nginx,可以不进行设置
worker_processes auto; # Nginx 进程数,一般设置为和 CPU 核数一样
error_log /var/log/nginx/error.log warn; # Nginx 的错误日志存放目录
pid /var/run/nginx.pid; # Nginx 服务启动时的 pid 存放位置
# events段配置信息
events {
use epoll; # 使用epoll的I/O模型(如果你不知道Nginx该使用哪种轮询方法,会自动选择一个最适合你操作系统的)
worker_connections 1024; # 每个进程允许最大并发数
}
# http段配置信息
# 配置使用最频繁的部分,代理、缓存、日志定义等绝大多数功能和第三方模块的配置都在这里设置
http {
# 设置日志模式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main; # Nginx访问日志存放位置
sendfile on; # 开启高效传输模式
tcp_nopush on; # 减少网络报文段的数量
tcp_nodelay on;
keepalive_timeout 65; # 保持连接的时间,也叫超时时间,单位秒
types_hash_max_size 2048;
include /etc/nginx/mime.types; # 文件扩展名与类型映射表
default_type application/octet-stream; # 默认文件类型
include /etc/nginx/conf.d/*.conf; # 加载子配置项
# server段配置信息
server {
listen 80; # 配置监听的端口
server_name localhost; # 配置的域名
# location段配置信息
location / {
root /usr/share/nginx/html; # 网站根目录
index index.html index.htm; # 默认首页文件
deny 172.168.22.11; # 禁止访问的ip地址,可以为all
allow 172.168.33.44;# 允许访问的ip地址,可以为all
}
error_page 500 502 503 504 /50x.html; # 默认50x对应的访问页面
error_page 400 404 error.html; # 同上
}
}
main
全局配置,对全局生效;events
配置影响Nginx
服务器与用户的网络连接;http
配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置;server
配置虚拟主机的相关参数,一个http
块中可以有多个server
块;location
用于配置匹配的uri
;upstream
配置后端服务器具体地址,负载均衡配置不可或缺的部分;
server_name
指令
指定虚拟主机域名。
server_name www.taouvw.xyz;
root
指定静态资源目录位置,它可以写在http
,server
,location
等配置中。
root path
例如:
location /image {
root /opt/nginx/static;
}
当用户访问 www.test.com/image/1.png 时,实际在服务器找的路径是 /opt/nginx/static/image/1.png
www.test.com
替换成/opt/nginx/static
root
会将定义路径与 URI
叠加, alias
则只取定义路径。
alias
也是指定静态资源目录的位置,但它只能写在location
中
location /image {
alias /opt/nginx/static/image/;
}
当用户访问 www.test.com/image/1.png 时,实际在服务器找的路径是 /opt/nginx/static/image/1.png
使用 alias 末尾一定要添加 /
,并且它只能位于 location
中。
location
配置路径
location [ = | ~ | ~* | ^~ ] uri {
...
}
匹配规则:
=
精确匹配;~
正则匹配,区分大小写;~*
正则匹配,不区分大小写;^~
匹配到即停止搜索;
server {
listen 80;
server_name www.nginx-test.com;
# 只有当访问 www.nginx-test.com/match_all/ 时才会匹配到/usr/share/nginx/html/match_all/index.html
location = /match_all/ {
root /usr/share/nginx/html
index index.html
}
# 当访问 www.nginx-test.com/1.jpg 等路径时会去 /usr/share/nginx/images/1.jpg 找对应的资源
location ~ \.(jpeg|jpg|png|svg)$ {
root /usr/share/nginx/images;
}
# 当访问 www.nginx-test.com/bbs/ 时会匹配上 /usr/share/nginx/html/bbs/index.html
location ^~ /bbs/ {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
return
停止处理请求,直接返回响应码或重定向到其他 URL
;执行 return
指令后, location
中后续指令将不会被执行。
return code [text];
return code URL;
return URL;
例如:
location / {
return 404; # 直接返回状态码
}
location / {
return 404 "pages not found"; # 返回状态码 + 一段文本
}
location / {
return 302 /bbs ; # 返回状态码 + 重定向地址
}
location / {
return https://www.baidu.com ; # 返回重定向地址
}
变量
变量名 | 含义 |
---|---|
remote_addr |
客户端 IP 地址 |
remote_port |
客户端端口 |
server_addr |
服务端 IP 地址 |
server_port |
服务端端口 |
server_protocol |
服务端协议 |
connection |
TCP 连接的序号,递增 |
connection_request |
TCP 连接当前的请求数量 |
uri |
请求的URL,不包含参数 |
request_uri |
请求的URL,包含参数 |
scheme |
协议名, http 或 https |
request_method |
请求方法 |
request_length |
全部请求的长度,包含请求行、请求头、请求体 |
args |
全部参数字符串 |
arg_参数名 |
获取特定参数值 |
is_args |
URL 中是否有参数,有的话返回 ? ,否则返回空 |
query_string |
与 args 相同 |
host |
请求信息中的 Host ,如果请求中没有 Host 行,则在请求头中找,最后使用 nginx 中设置的 server_name 。 |
http_user_agent |
用户浏览器 |
http_referer |
从哪些链接过来的请求 |
http_via |
每经过一层代理服务器,都会添加相应的信息 |
http_cookie |
获取用户 cookie |
request_time |
处理请求已消耗的时间 |
https |
是否开启了 https ,是则返回 on ,否则返回空 |
request_filename |
磁盘文件系统待访问文件的完整路径 |
document_root |
由 URI 和 root/alias 规则生成的文件夹路径 |
limit_rate |
返回响应时的速度上限值 |
proxy_pass
用于配置代理服务器
语法:proxy_pass URL;
上下文:location、if、limit_except
示例:
proxy_pass http://127.0.0.1:8081
proxy_pass http://127.0.0.1:8081/proxy
URL
参数原则
URL
必须以http
或https
开头;URL
中可以携带变量;URL
中是否带URI
,会直接影响发往上游请求的URL
;
HTTPS
HTTPS 工作流程
- 客户端(浏览器)访问
https://www.baidu.com
百度网站; - 百度服务器返回
HTTPS
使用的CA
证书; - 浏览器验证
CA
证书是否为合法证书; - 验证通过,证书合法,生成一串随机数并使用公钥(证书中提供的)进行加密;
- 发送公钥加密后的随机数给百度服务器;
- 百度服务器拿到密文,通过私钥进行解密,获取到随机数(公钥加密,私钥解密,反之也可以);
- 百度服务器把要发送给浏览器的内容,使用随机数进行加密后传输给浏览器;
- 此时浏览器可以使用随机数进行解密,获取到服务器的真实传输内容;
这就是 HTTPS
的基本运作原理,使用对称加密和非对称机密配合使用,保证传输内容的安全性。
server {
listen 443 ssl http2 default_server; # SSL 访问端口号为 443
server_name lion.club; # 填写绑定证书的域名(我这里是随便写的)
ssl_certificate /etc/nginx/https/lion.club_bundle.crt; # 证书地址
ssl_certificate_key /etc/nginx/https/lion.club.key; # 私钥地址
ssl_session_timeout 10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 支持ssl协议版本,默认为后三个,主流版本是[TLSv1.2]
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}