【Nginx】之 nginx 问题汇总

目录


1、请求头过大导致 400 问题


问题情景:前端发送一个请求,结果返回 400。

问题原因:请求所携带的 Cookie 过大,超过了 Nginx 的最大上限,所以返回 400。

解决方法:修改 Nginx 配置文件,根据情况加大请求头缓冲区大小

client_header_buffer_size 32k;
large_client_header_buffers 8 32k;

这里需要注意,有时候只是 Nginx 加大了请求头的缓冲区大小是不够的,还需要配合服务端应用程序,比如在 JavaSpringBoot 项目中,还要设置一下请求头大小:

server:
    max-http-header-size: 32768  # 32K

也就是说 nginx 和 服务端程序都要进行最大请求头设置。


2、一个server配置多个location


问题情景:当在 server 中配置多个 location 时,特定 url 的 location 会出现 404

location / {
    root   html;
    index  index.html index.htm;
}

location /app {
    root   html;
    index  app.html app.htm;
}

此时,访问 / 时可以访问得到 index.html 文件,但访问 /app 时却报 404。

问题原因:在 location 块中,如果使用的是一个特定的 url 的话,不用使用 root,要使用 alias

解决方法:在特定 url 的 location 中替换 rootalias

location / {
    root   html;
    index  index.html index.htm;
}

location /app {
    alias   html;   # 改成 alias
    index  app.html app.htm;
}

3、反向代理时的url匹配问题


问题情景:在 Nginx 进行反向代理时

# server 1
server {
    listen       80;
    server_name  localhost;

    location /app {
        proxy_pass_header  Set-Cookie;
        proxy_set_header Host $host;
        proxy_set_header X-Real-Ip $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        # 跳转至代理服务器
        proxy_pass  http://192.168.56.10:81;
    }
}

# server 2
server {
    listen       81;
    server_name  192.168.56.10;

    location / {
        root   html;
        index  app.html app.htm;
    }
}

当在 server1 中访问 /app 时,期待跳转并访问 server2 时却出现无法访问的问题。

问题原因:出现这个问题的原因是,当我们请求代理服务器时,会将 url 地址全部信息一起发送过去,也就是说在 server2 中收到的请求 url 的地址为 /app(可以使用 $request_uri 进行查看),所以无法在 server2 找到对应的 location。

解决方法:匹配请求的 url 地址即可

# server 2
server {
    listen       81;
    server_name  192.168.56.10;

    location /app {
        alias   html;
        index  app.html app.htm;
    }
}

注意:如果 location 中为特定的 url 时,别忘记了使用 alias 而不是 root

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值