Nginx 最少配置
安全服务器是只允许尽可能多的服务器。理想情况下,我们将通过单独启用附加功能来构建基于最小系统的服务器。使用最少的配置也有助于调试。如果错误在最小系统中不可用,则会单独添加功能并继续搜索错误。
这是运行 Nginx 所需的最少配置:
# /etc/Nginx/Nginx.conf events {} # event context have to be defined to consider config valid http { server { listen 80; server_name aizws.co www.aizws.co *.aizws.co; return 200 "Hello"; } }
Root、location 和 try_files 指令
root 指令
root 指令用于设置请求的根目录,允许Nginx 将传入的请求映射到文件系统。
server { listen 80; server_name aizws.co; root /var/www/aizws.co; }
允许Nginx根据请求返回服务器内容:
aizws.co:80/index.html # returns /var/www/aizws.net/index.html aizws.co:80/foo/index.html # returns /var/www/aizws.net/foo/index.html
Location Directive
location 指令用于根据请求的 URI(统一资源标识符)设置配置。
语法为:
location [modifier] path
示例:
location /foo { # ... }
当没有给出修饰符时,路径被视为前缀,之后可以跟任何东西。上面的例子将匹配:
/foo /fooo /foo123 /foo/bar/index.html ...
我们还可以在给定的上下文中使用多个位置指令:
server { listen 80; server_name aizws.co; root /var/www/aizws.co; location / { return 200 "root"; } location /foo { return 200 "foo"; } }
aizws.co:80 / # => "root" aizws.co:80 /foo # => "foo" aizws.co:80 /foo123 # => "foo" aizws.co:80 /bar # => "root"
Nginx 还提供了一些可以与 location 指令结合使用的修饰符。
修饰符已分配优先级:
= -Exact match ^~ -Preferential match ~ && ~* -Regex match no modifier-Prefix match
首先,Nginx 会检查是否有完全匹配。如果它不存在,它将寻找优先的。如果此匹配也失败,则将按出现顺序测试正则表达式匹配。如果其他一切都失败了,将使用最后一个前缀匹配。
location /match { return 200 'Prefix match: will match everything that starting with /match'; } location ~* /match[0-9] { return 200 'case insensitive regex match'; } location ~ /MATCH[0-9] { return 200 'case sensitive regex match'; } location ^~ /match0 { return 200 'Preferential match'; } location = /match { return 200 'Exact match'; }
/match # => 'Exact match' /match0 # => 'Preferential match' /match1 # => 'case insensitive regex match' /MATCH1 # => 'case sensitive regex match' /match-abc # => 'Prefix match: matches everything that starting with /match'
try_files 指令
该指令尝试不同的路径并返回找到的任何一个。
try_files $uri index.html =404;
所以/foo.html 会尝试按以下顺序返回文件:
- $uri(/foo.html);
- index.html
- 如果没有找到: 404
如果我们在服务器上下文中定义了try_files,然后定义了一个找到所有请求的位置,我们的try_files就不会被执行。发生这种情况是因为服务器上下文中的 try_files 定义了其伪位置,这是可能的最不具体的位置。因此,定义 location/ 将比我们的伪位置更具体。
server { try_files $uri /index.html =404; location / { } }
因此,我们应该避免在服务器上下文中使用 try_files:
server { location / { try_files $uri /index.html =404; } }
下一章:Nginx 反向代理
代理是驻留在内部应用程序和外部客户端之间的服务器,将客户端请求转发到适当的服务器。 Nginx 反向代理服务器是位于私有网络中防火墙后面的代理服务器,并将客户端请求定向到适当的后端服务器。反向代理提供了额外的级别抽象和 ...