Hkc

vuePress-theme-reco Hkc    2025
Hkc Hkc

Choose mode

  • dark
  • auto
  • light
TimeLine
GitHub
author-avatar

Hkc

25

Article

13

Tag

TimeLine
GitHub
  • Vue

  • Websocket

  • JS

  • CSS

  • Canvas

  • HTTP

  • GIT

  • SERVER

    • centOS部署mysql5.7
    • NGINX常见问题
    • Docker 相关
    • Docker 部署
  • MORE

NGINX常见问题

vuePress-theme-reco Hkc    2025

NGINX常见问题

Hkc 2021-08-26 NGINX

# location 路径映射

location [ = | ~ | ~* | !~ | !~* | @ ] uri {...}

= 表示精确匹配,如果找到,立即停止搜索并立即处理此请求。

~ 表示执行一个正则匹配,区分大小写匹配

~* 表示执行一个正则匹配,不区分大小写匹配

!~ 区分大小写不匹配

!~* 不区分大小写不匹配

^~ 即表示只匹配普通字符(空格)。使用前缀匹配,^表示“非”,即不查询正则表达式。如果匹配成功,则不再匹配其他 location。

@ 指定一个命名的 location,一般只用于内部重定向请求。例如 error_page, try_files

uri 是待匹配的请求字符串,可以不包含正则表达式,也可以包含正则表达式;

优先级和示例:

[不加] < [~/~*] < [^~] < [=]

# proxy_pass 转发地址问题

首先 nginx.conf 配置文件中涉及转发地址相关的有两处配置 location 和 proxy_pass

  1. 若 location 和 proxy_pass 都带/,那么真实地址不会追加 location 的内容
location /api/ {
  proxy_pass http://127.0.0.1:8080/;
}
//访问: http://www.test.com/api/upload -> http://127.0.0.1:8080/upload
  1. 若 location 和 proxy_pass 都不带/,那么真实地址会追加 location 的内容
location /api {
  proxy_pass http://127.0.0.1:8080;
}
//访问: http://www.test.com/api/upload -> http://127.0.0.1:8080/api/upload
  1. 若 location带/ ,proxy_pass 不带/,那么真实地址会追加 location 的内容
location /api/ {
  proxy_pass http://127.0.0.1:8080;
}
//访问: http://www.test.com/api/upload -> http://127.0.0.1:8080/api/upload
  1. 若 location不带/ ,proxy_pass 带/,那么真实地址不会追加 location 的内容
location /api {
  proxy_pass http://127.0.0.1:8080/;
}
//访问: http://www.test.com/api/upload -> http://127.0.0.1:8080//upload
//注意此时的地址会存在两个/

# 其他常用指令

# return 指令

返回 http 状态码和可选的第二个参数可以是重定向的 URL

# rewrite 指令

重写 URI 请求 rewrite,通过使用 rewrite 指令在请求处理期间多次修改请求 URI,该指令具有一个可选参数和两个必需参数。

第一个(必需)参数是请求 URI 必须匹配的正则表达式。

第二个参数是用于替换匹配 URI 的 URI。

可选的第三个参数重写策略

last 重写后的 URL 发起新请求,再次进入 server 段,重试 location 的中的匹配;

break 直接使用重写后的 URL ,不再匹配其它 location 中语句;

redirect 返回 302 临时重定向;

permanent 返回 301 永久重定向;

# error_page 指令

使用 error_page 指令,您可以配置 NGINX 返回自定义页面以及错误代码,替换响应中的其他错误代码,或将浏览器重定向到其他 URI。在以下示例中,error_page 指令指定要返回 404 页面错误代码的页面(/404.html)。

# 日志

访问日志:需要开启压缩 gzip on; 否则不生成日志文件,打开 log_format、access_log 注释

# deny 、allow 指令

# 内置变量

nginx的配置文件中可以使用的内置变量以美元符$开始。其中,大部分预定义的变量的值由客户端发送携带。

$args :#这个变量等于请求行中的参数,同$query_string

$content_length :请求头中的Content-length字段。

$content_type :请求头中的Content-Type字段。

$document_root :当前请求在root指令中指定的值。

$host :请求行的主机名,为空则为请求头字段 Host 中的主机名,再为空则与请求匹配的server_name

$http_user_agent :客户端agent信息

$http_cookie :客户端cookie信息

$limit_rate :这个变量可以限制连接速率。

$request_method :客户端请求的动作,通常为GET或POST。

$remote_addr :客户端的IP地址。

$remote_port :客户端的端口。

$remote_user :已经经过Auth Basic Module验证的用户名。

$request_filename :当前请求的文件路径,由root或alias指令与URI请求生成。

$scheme :HTTP方法(如http,https)。

$server_protocol :请求使用的协议,通常是HTTP/1.0或HTTP/1.1。

$server_addr :服务器地址,在完成一次系统调用后可以确定这个值。

$server_name :服务器名称。

$server_port :请求到达服务器的端口号。

$request_uri :包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。

$uri :不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”。

$document_uri :与$uri相同