V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Richard14
V2EX  ›  问与答

nginx 如何反向代理 GO 语言编写的 web 服务?

  •  
  •   Richard14 · 2022-05-30 07:23:00 +08:00 · 1459 次点击
    这是一个创建于 907 天前的主题,其中的信息可能已经有所发展或是发生改变。

    github 上找了个 go 写的监控服务,想用 nginx 反向代理放到公网上,反向代理配置

    server {
    	...
        location / {       
            proxy_pass http://127.0.0.1:30666;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $http_host;
    
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
    

    按此配置执行后,访问根目录可以得到正确的 html ,但由 go 提供的静态资源无法加载,(比如 https://my.site/css/app.b9c5a4b6.css )这种资源,

    在服务器本地运行

    wget http://127.0.0.1:30666/css/app.b9c5a4b6.css
    

    是可以正确获取到资源的,但是 nginx 无法代理,推测也许是 nginx 扫描本地目录当中没有 css 这个文件夹所以返回 404 ?

    总之是本地有,远程返回 404 ,有无大佬知道是怎么回事

    第 1 条附言  ·  2022-05-30 15:35:51 +08:00

    贴个条,后续是修改了如下,然后解决的

    server{
        # ...
        location / {
            proxy_pass http://127.0.0.1:30666
            # ...
        }
        location ~ .*\.(js|css)?$
        {
            expires      12h;
            proxy_pass http://127.0.0.1:30666;
        }
    }
    

    nginx这么多年没细研究过也用过来了,可能是一般都是静态资源放个文件夹,动态内容单独反代,没遇到过这种情况。。。话说我一直以为location规则只能匹配一个,匹配到了就结束了。。但是突然发现就算是正常的反向代理,比如匹配到/返回一个静态资源的话,依然会匹配接下来的location,设置过期时间。。这是个什么原理啊。。

    7 条回复    2022-05-30 13:11:59 +08:00
    tcp
        1
    tcp  
       2022-05-30 07:44:45 +08:00
    websocket ?
    lovelylain
        2
    lovelylain  
       2022-05-30 08:04:06 +08:00 via Android
    proxy_set_header Connection $http_connection;
    estk
        3
    estk  
       2022-05-30 08:32:33 +08:00 via Android
    宝塔。。
    villivateur
        4
    villivateur  
       2022-05-30 08:42:23 +08:00 via Android
    我觉得不太可能,要不你把你完整的配置发出来再看看
    RoyLaw
        5
    RoyLaw  
       2022-05-30 08:51:01 +08:00
    去掉类似的配置:

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
    expires 30d;
    error_log /dev/null;
    access_log /dev/null;
    }
    location ~ .*\.(js|css)?$
    {
    expires 12h;
    error_log /dev/null;
    access_log /dev/null;
    }
    ragnaroks
        6
    ragnaroks  
       2022-05-30 09:00:09 +08:00
    websocket 单独代理
    coolloves
        7
    coolloves  
       2022-05-30 13:11:59 +08:00
    贴下 nginx 的日志吧
    nginx 只是负责转发,如果转发了,那就要看后端 go 的 web 日志为啥找不到静态资源
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5738 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 02:32 · PVG 10:32 · LAX 18:32 · JFK 21:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.