技术解析

[求助] 关于 nginx 配置的问题,请教诸位大佬
0
2021-05-19 20:14:05
idczone

明明看上去好像没有错抗投诉服务器,可为啥不生效呢?琢磨了很久


server 部分的配置代码如下:
server{
listen 80;
server_name test;
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8088/gg;
proxy_redirect off;
}
}

nginx -t 看看

svrver name 不对吧

以上的代码有错吗?(好像没有对吧)
但是:
1.当我访问 http://118.24.117.188 的时候,可以显示 welcome to nginx,
却不能显示我跑在 http://118.24.117.188:8088/gg 的 springboot 404 页面
2.http://118.24.117.188:8088/gg/index 是一个 @RestController,会一句测试字符串返回
然而当我访问 http://118.24.117.188/index 的时候缺失 404

server name 应该是域名吧? 加个 default 对所有起作用?

路径不对是吧,location 里面加一条
rewrite ^(.*)$ /gg$1 break;
然后把 proxy_pass 的 /gg 去掉试试

我改改试试
nginx -t 结果 successed


只有一个 server 的时候什么域名都是一样的。除非设另外一个 default server

你不用 servername 却用 ip 请求,自然走不到你这个 server。

server{
listen 80;
server_name default 118.24.117.188;
location / {
rewrite ^(.*)$ /gg$1 break;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8088;
proxy_redirect off;
}
}

解决了,感谢各位大佬!!

@newghost

这是一个非常常见的新手错误……
nginx proxy pass 不会发送你写在后面的 path 的,只会发送当前实际 path
不然就要 rewrite
你可以看一下 proxy_pass 的文档
或者搜索 nginx proxy_pass rewrite

总结:确实是域名问题

default server 的命令不是这样的,是在 listen 后面加 default_server。
如果你要 ip 访问的话,只要监听到了 ip,ip 访问到的就是 default_server 了,不需要单独配置。不然 ip 换了还要改配置。、
而且注意在网上发言不要泄露服务器 ip,防止被 ddcc ( V2EX 不能删贴)

你要是不 rewrite 即使域名对了也是一样 404/500

原来如此,我刚才试了下注释掉 rewrite (但是 proxy_pass 后面的 /gg 没有加上),可以访问。正如你所说的不会跳转到后面的 path。
然后又试了一下加上 /gg,结果不能访问

然而,server_name 也确实有问题,还是要设置 ip 域名的(我又试了把 server_name 改回之前的“ test ”,结果不行)。所以 server_name 确实要设置 ip 域名

噢,我又摸索了下 default_server 指令,可能我的具体操作有问题(记得之前改过另外某处的配置,加了 default_server 后启动报错 listen wrong param 0.0.0.0:80 之类的,最后没有加 default_server ),然后我调整了一下 rewrite -> rewrite ^/gg(.*)$ /gg$1 break; 总算可以用了 location /gg 了,身心释然
第一次发帖,再次感谢各位~





总结:
错误 1:server_name 没有设置 ip (在 default_server 未设置成功的情况下需要配置 ip,default_server 待探索)
错误 2:location /gg 需要用 rewrite 来加工 url,否则会出现一些未知的问题(待探索)
最终配置如下:
server{
listen 80;
server_name 118.24.117.188;
server_name test;
location /gg {
rewrite ^/gg(.*)$ /gg$1 break;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8088;
proxy_redirect off;
}
}

1L 的配置 , 这样修改试试
proxy_pass http://127.0.0.1:8088/gg; => proxy_pass http://127.0.0.1:8088/gg/;

servername 改成 ip 然后用 ip 访问

如果服务器上面,就只有一个网站,server_name 后面配置是啥都是可以访问到的。
server_name ip;
server_name "";
server_name 乱写的域名.com;

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服