V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
zty7723271
V2EX  ›  NGINX

[求助] 关于 nginx 配置的问题,请教诸位大佬

  •  
  •   zty7723271 · 2018-08-05 20:15:01 +08:00 · 3000 次点击
    这是一个创建于 2291 天前的主题,其中的信息可能已经有所发展或是发生改变。

    明明看上去好像没有错,可为啥不生效呢?琢磨了很久

    19 条回复    2018-08-06 00:34:18 +08:00
    zty7723271
        1
    zty7723271  
    OP
       2018-08-05 20:15:53 +08:00
    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;
    }
    }
    jdlau
        2
    jdlau  
       2018-08-05 20:17:00 +08:00 via Android
    nginx -t 看看
    qcloud
        3
    qcloud  
       2018-08-05 20:19:21 +08:00 via iPhone
    svrver name 不对吧
    zty7723271
        4
    zty7723271  
    OP
       2018-08-05 20:21:09 +08:00
    以上的代码有错吗?(好像没有对吧)
    但是:
    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
    newghost
        5
    newghost  
       2018-08-05 20:21:27 +08:00
    server name 应该是域名吧? 加个 default 对所有起作用?
    isCyan
        6
    isCyan  
       2018-08-05 20:22:13 +08:00
    路径不对是吧,location 里面加一条
    rewrite ^(.*)$ /gg$1 break;
    然后把 proxy_pass 的 /gg 去掉试试
    zty7723271
        7
    zty7723271  
    OP
       2018-08-05 20:22:53 +08:00
    @qcloud 我改改试试
    @jdlau nginx -t 结果 successed
    isCyan
        8
    isCyan  
       2018-08-05 20:23:01 +08:00
    @qcloud
    @newghost 只有一个 server 的时候什么域名都是一样的。除非设另外一个 default server
    coffeSlider
        9
    coffeSlider  
       2018-08-05 20:24:10 +08:00 via Android
    你不用 servername 却用 ip 请求,自然走不到你这个 server。
    zty7723271
        10
    zty7723271  
    OP
       2018-08-05 20:27:16 +08:00
    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;
    }
    }


    解决了,感谢各位大佬!!
    @isCyan
    @newghost
    isCyan
        11
    isCyan  
       2018-08-05 20:29:03 +08:00
    @zty7723271 这是一个非常常见的新手错误……
    nginx proxy pass 不会发送你写在后面的 path 的,只会发送当前实际 path
    不然就要 rewrite
    你可以看一下 proxy_pass 的文档
    或者搜索 nginx proxy_pass rewrite
    zty7723271
        12
    zty7723271  
    OP
       2018-08-05 20:29:05 +08:00
    总结:确实是域名问题
    isCyan
        13
    isCyan  
       2018-08-05 20:32:00 +08:00
    default server 的命令不是这样的,是在 listen 后面加 default_server。
    如果你要 ip 访问的话,只要监听到了 ip,ip 访问到的就是 default_server 了,不需要单独配置。不然 ip 换了还要改配置。、
    而且注意在网上发言不要泄露服务器 ip,防止被 ddcc ( V2EX 不能删贴)
    isCyan
        14
    isCyan  
       2018-08-05 20:32:50 +08:00
    你要是不 rewrite 即使域名对了也是一样 404/500
    zty7723271
        15
    zty7723271  
    OP
       2018-08-05 20:35:11 +08:00
    @isCyan 原来如此,我刚才试了下注释掉 rewrite (但是 proxy_pass 后面的 /gg 没有加上),可以访问。正如你所说的不会跳转到后面的 path。

    然后又试了一下加上 /gg,结果不能访问


    然而,server_name 也确实有问题,还是要设置 ip 域名的(我又试了把 server_name 改回之前的“ test ”,结果不行)。所以 server_name 确实要设置 ip 域名
    zty7723271
        16
    zty7723271  
    OP
       2018-08-05 21:15:55 +08:00   ❤️ 1
    @isCyan 噢,我又摸索了下 default_server 指令,可能我的具体操作有问题(记得之前改过另外某处的配置,加了 default_server 后启动报错 listen wrong param 0.0.0.0:80 之类的,最后没有加 default_server ),然后我调整了一下 rewrite -> rewrite ^/gg(.*)$ /gg$1 break; 总算可以用了 location /gg 了,身心释然

    第一次发帖,再次感谢各位~
    @jdlau
    @qcloud
    @newghost
    @coffeSlider
    @isCyan

    总结:
    错误 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;
    }
    }
    akira
        17
    akira  
       2018-08-06 00:21:41 +08:00
    1L 的配置 , 这样修改试试
    proxy_pass http://127.0.0.1:8088/gg; => proxy_pass http://127.0.0.1:8088/gg/;
    ancelli
        18
    ancelli  
       2018-08-06 00:25:12 +08:00 via iPad
    servername 改成 ip 然后用 ip 访问
    akira
        19
    akira  
       2018-08-06 00:34:18 +08:00
    如果服务器上面,就只有一个网站,server_name 后面配置是啥都是可以访问到的。

    server_name ip;
    server_name "";
    server_name 乱写的域名.com;
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5317 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 03:45 · PVG 11:45 · LAX 19:45 · JFK 22:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.