nginx -t 检查配置文件语法问题
nginx -s reload 重新加载conf文件
location 块
= 表示精确匹配
~ 这个符号开头表示区分大小写
* 一般和 ~ 公用, ~* 表示不区分大小写
^ 表示正则的开始
前缀匹配:默认的匹配方式,不带修饰符,匹配 URI 的前缀。
javascript
location /api {
# 处理 /api 及其子路径的请求
}
精确匹配:使用 = 修饰符,仅当请求 URI 与指定字符串完全相等时匹配。
javascript
location = / {
# 仅处理根路径 / 的请求
}
正则表达式匹配:使用 ~ 或 ~* 修饰符,分别表示区分大小写和不区分大小写的正则表达式匹配。
javascript
location ~* \.(jpg|png|gif)$ {
# 处理所有以 .jpg、.png 或 .gif 结尾的请求
}
目录匹配:以斜杠 / 结尾的匹配模式,用于匹配特定的目录。
javascript
location /images/ {
# 处理 /images/ 目录下的请求
}
javascript
location ^~ /favicon.ico {
alias /data/webapps/nginx/www/favicon.ico;
}
location ^~ /css/ {
alias /data/nginx/www/css/;
}
location ^~ /css2/ {
alias /data/nginx/www/css2/;
}
location ^~ /icons/ {
alias /data/nginx/www/icons/;
}
location ^~ /images/ {
alias /data/nginx/www/images/;
}
location ^~ /js/ {
alias /data/nginx/www/js/;
}
javascript
# 使用正则表达式匹配/a和/b路径
location ~ ^/(a|b)$ {
return 404;
}
# 处理静态文件
location /static/ {
alias /path/to/static/files/;
try_files $uri $uri/ =404;
}
javascript
server {
listen 80;
server_name example.com;
# 精确匹配/a和/b路径,并返回404
location = /a {
return 404 "Not Found: /a is not allowed.";
}
location = /b {
return 404 "Not Found: /b is also not allowed.";
}
# 处理API请求,可能通过proxy_pass转发到其他服务器
location /api/ {
proxy_pass http://backend_server/api/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# 匹配所有其他路径,尝试服务静态文件(如果配置了的话),否则返回404
location / {
root /usr/share/nginx/html;
try_files $uri $uri/ /index.html; # 尝试服务文件,如果找不到则重定向到index.html(常用于单页应用)
# 如果上面的try_files没有匹配到任何文件,并且没有重定向到index.html,则可以考虑在这里返回404
# 但由于try_files的最后一个参数是/index.html,通常不会执行到这里
# 如果不希望重定向到index.html,可以去掉/index.html,并在下面添加return 404;
}
# 错误页面处理(可选)
error_page 404 /404.html;
location = /404.html {
root /usr/share/nginx/html;
internal;
}
}
location 块的优先级
当有多个 location 块匹配同一个请求时,Nginx 会根据以下规则来确定使用哪个 location 块:
1.首先检查是否有精确匹配 (=)。
2.如果没有,检查是否有带有正则表达式的匹配 (~ 或 ~*),并使用第一个匹配的规则。
3.如果没有正则表达式匹配,则使用最长的前缀匹配。