如何让我的反向代理 Nginx 服务器访问在端口 3000 上运行的快速应用程序中的其他路由文件?

如何让我的反向代理 Nginx 服务器访问在端口 3000 上运行的快速应用程序中的其他路由文件?

目前我在 /usr/share/nginx/myexpress 里面有一个 express 应用程序

express 应用程序正在监听 3000 端口并正常运行。我的 NGINX 服务器正在反向代理它,我可以通过访问 kodix.com.br 查看默认的 express 页面。

问题是,路由后我无法访问 kodix.com.br/hello。我只能通过 IP 地址访问它。(与此示例类似,但使用其他号码:143.94.233.176:3000/hello)

这是我现在的可用站点nginx配置:

upstream node_app{
server 127.0.0.1:3000;
}

server {

    root /usr/share/nginx/myexpress;

    # Add index.php to the list if you are using PHP
    index index.html index.htm index.nginx-debian.html;

    server_name kodix.com.br www.kodix.com.br;

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;
        proxy_pass http://node_app;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }

}

我该如何实现使用我的 nginx 服务器访问其他快速页面?

答案1

我不确定这是否是正确的方法,但我设法通过向服务器块添加位置块使其工作:

location /hello/ {
    proxy_pass http://localhost:3000/hello;
}

然后,访问 myserver.com.br/hello 会将我重定向到正确的页面。

答案2

解决此问题的正常方法是使用命名位置。在此设置中,nginx 将首先提供静态内容。如果 URL 路径中不存在静态内容,则不会返回 404,而是将其传递到命名位置,然后将其发送到您的应用程序。

这是一个非常简单的添加:

    location / {
        try_files $uri $uri/ @express;
    }

    location @express {
        proxy_pass http://node_app;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }

PS 将您的 Web 文件存储在 中并不是一个好主意/usr/share/nginx。此目录归包管理器所有,并且它有权在 nginx 包更新或删除时删除其中的所有内容。(它很可能不会这样做,但我不会冒这个风险。)

相关内容