概述
这篇文章介绍了 nginx 的配置语法与常见配置示例。
关于 nginx
Nginx (读音同 engine X
),是开源的异步框架的网页服务器,可以用作反向代理、负载均衡器和 HTTP 缓存。
官网:http://nginx.org/
配置语法
配置结构
1 2 3 4 5 6
| main # 全局配置,对全局生效 events # 影响 nginx 服务器或与用户的网络连接 http # 配置代理、缓存、日志定义等绝大多数功能和第三方模块的配置 upstream # 配置后端服务器具体地址,负载均衡配置不可或缺的部分 server # 配置虚拟主机的相关参数,一个 http 块中可以有多个 server 块 location # 配置 uri 匹配路由,server 块可以包含多个 location 块
|
语法
- 配置文件由指令和指令块构成
- 每条指令以
;
分号结尾,指令与参数间以空格符号分隔
- 指令块以大括号
{}
包裹,可包含多个配置文件
include
语句允许组合多个配置文件以提升可维护性
#
用于添加注释
$
用于引用变量
- 部分指令的参数支持正则表达式,如
location
指令
内置变量
变量 |
含义 |
$host |
请求信息中的 Host,如果请求中没有 Host 行,则等于设置的服务器名 |
$request_method |
客户端请求方法,如 GET、POST |
$remote_addr |
客户端 IP 地址 |
$args |
请求中的参数 |
$content_length |
请求头中的 Content-length 字段 |
$http_user_agent |
客户端 agent 信息 |
$http_cookie |
客户端 cookie 信息 |
$remote_port |
客户端端口 |
$server_protocol |
请求使用的协议,如 HTTP/1.1 |
$server_addr |
服务器地址 |
$server_name |
服务器名称 |
$server_port |
服务器端口号 |
常用配置
反向代理
将用户请求代理的真实的服务器上。
正向代理与反向代理:正向代理是为用户做代理,用户知道服务器的地址,但是由于一些原因请求不能直接到达服务器,就需要一个代理服务来帮用户向服务器发起请求。反向代理则是为服务器做代理,用户不知道具体服务器的地址,用户只需要向服务器提供的代理发起请求,代理负责将请求发送给实际响应的服务器。
正向代理隐藏了用户,反向代理隐藏了服务器。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| server { listen 80; # 将所有请求代理到 nginx 根目录下的 html/dest/web 目录 location / { root html/dest/web; index index.html index.htm; try_files $uri $uri/ /index.html; } # 将所有 80 端口的 /api 开头的请求代理到本地 8080 端口 location /api { proxy_pass http://localhost:8080; } # 反代所有以/static/开头的的请求到本地文件目录 location ^~ /static/ { alias "D:/data/"; autoindex off; # autoindex 设置为 on 时,用户可访问目录下的其它文件,为 off 时不能访问其它文件 access_log off; expires max; } # 发生 500、502、503、504 错误时返回 json 格式的错误信息 error_page 500 502 503 504 /respon_500.json; location = /respon_500.json { default_type application/json; return 403 '{"state":"fail","result":"Server Error"}'; } # 多个 server 配置 server { listen 443 ssl; # https 请求 server_name _;
#字符集 charset utf-8;
# ssl 证书配置 ssl_certificate G:\\program\\server\\nginx-1.16.1\\ssl\\server.crt; ssl_certificate_key G:\\program\\server\\nginx-1.16.1\\ssl\\server.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on;
location / { root html/dest/web; index index.html index.htm; } } server { listen 80; # 可以配置有相同的端口 server_name www.xxx.com www.yyy.com; # 指定访问域名,从这些域名进来的请求会进到这个配置块 location / { root html/dest/web; index index.html index.htm; } } }
|
访问权限
禁止指定 ip 访问,被禁止访问的 ip 访问时会报 403
错误。
1 2 3 4 5 6 7 8 9 10 11 12
| server { listen 80; location / { allow 172.16.16.1; # 允许访问的ip allow 192.168.0.0/16; # 允许访问的ip段 deny all; # 拒绝其他所有 ip root html/dest/web; index index.html index.htm; } }
|
参考资料