1. Nginix基本配置框架
a. 配置的几个顶级指令:
b. 配置文件:nginx安装目录下的 conf 文件夹内 nginx.conf 文件
c. 基本结构如下:
user nobody; # a directive in the 'main' context events { # configuration of connection processing } http { # Configuration specific to HTTP and affecting all virtual servers server { # configuration of HTTP virtual server 1 location /one { # configuration for processing URIs with '/one' } location /two { # configuration for processing URIs with '/two' } } server { # configuration of HTTP virtual server 2 } } stream { # Configuration specific to TCP and affecting all virtual servers server { # configuration of TCP virtual server 1 } }
2. 设置虚拟服务器
a. 基本结构:
http { server { # Server configuration } }
b. server基本机构:
server { listen 80;
server_name localhost; # The rest of server configuration
location / {
proxy_pass http://www.example.com;
} }
c. location配置:
location指令有两种类型的参数:前缀字符串(路径名)和正则表达式。
对于要匹配前缀字符串的请求URI,必须以前缀字符串开头:
location /path/ { ... }
正则表达式之前是区分大小写匹配的波形符号(~
),或者不区分大小写匹配的波形符号(~*
):
location ~ \.html? { ... }
请求处理方式:
- 测试所有URI的前缀字符串。
=
(等号)修饰符定义了URI和前缀字符串完全匹配。如果找到完全匹配,则搜索停止。- 如果
^~
(插入符号)修饰符预先添加最长匹配前缀字符串,则不会检查正则表达式。 - 存储最长匹配的前缀字符串。
- 根据正则表达式测试URI。
- 断开第一个匹配的正则表达式并使用相应的位置。
- 如果没有正则表达式匹配,则使用与存储的前缀字符串相对应的位置。
location上下文可以包含定义如何解析请求的指令:
server { location /images/ {
# 静态文件文件系统路径 root /data; } location / {
# 代理服务配置 proxy_pass http://www.example.com; } }
d. 重写URI请求
可以通过使用rewrite
指令在请求处理期间多次修改请求URI,您可以在location
和 server
上下文中包含多个rewrite
指令。
该指令具有一个可选参数和两个必需参数。 第一个(必需)参数是请求URI必须匹配的正则表达式。 第二个参数是用于替换匹配URI的URI。 可选的第三个参数是可以停止进一步重写指令的处理或发送重定向(代码301
或302
)的标志。例如:
server { ... rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last; rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra last; return 403; ... }
此示例配置区分两组URI(正则匹配知识请自行补充,代码中颜色对应匹配,对号入座)。 诸如/download/some/media/file
之类的URI更改为/download/some/mp3/file.mp3
。由于最后一个标志,所以跳过后续指令(第二次rewrite
和return
指令),但NGINX继续处理该请求,该请求现在具有不同的URI。类似地,诸/download/some/audio/file
的URI被替换为/download/some/mp3/file.ra
。 如果URI与rewrite
指令不匹配,则NGINX将403
错误代码返回给客户端。
有两个中断处理重写指令的参数:
last
- 停止执行当前服务器或位置上下文中的重写指令,但是NGINX会搜索与重写的URI匹配的位置,并且应用新位置中的任何重写指令(URI可以再次更改,往下继续匹配)。break
- 像break
指令一样,在当前上下文中停止处理重写指令,并取消搜索与新URI匹配的位置。新位置(location
)块中的rewrite
指令不执行。
更多配置:重写http响应、错误处理、状态码配置、变量等:
参考:https://www.yiibai.com/nginx/nginx-web-server.html#article-start