【问题标题】:How to keep Nginx upstream for ExpressJS routes?如何为 ExpressJS 路由保持 Nginx 上游?
【发布时间】:2020-04-21 13:53:36
【问题描述】:

我有一个包含两个路由的 express 应用:一个索引路由 (/) 和一个文章路由 (/article)。

现在我尝试将此应用程序部署在 Nginx 后面的 Ubuntu 服务器上。

我遇到的问题是https://servername/app 上可用的索引路由工作正常,但是,如果我通过<a href="/article/param"></a> 输入路由(从索引开始),则上游/app 丢失并且我被路由到@ 987654324@ 显然不可用,因为我想被路由到https://servername/app/article/param

它在我的本地计算机上运行顺利,没有插入上游/Nginx。

我的 Nginx 配置如下:

upstream app {
        server localhost:3000;
}

server {
        #listen [::]:80 default_server ipv6only=on;

        #root /usr/share/nginx/html;
        # index index.html index.htm;

        # Make site accessible from http://localhost/
        server_name example.test.at;

        #Enable the verification for letsencrypt
        location /.well-known {
          root /usr/share/nginx/html;
        }

        location / {
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;
                proxy_pass http://127.0.0.1:8080;

                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";

#                try_files $uri $uri/ noen;
               }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/example.test.at/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.test.at/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

       location ~^\/(images|stylesheets|fonts|javascripts) {
           expires 1M;
           access_log off;
           add_header Cache-Control "public";
           add_header Access-Control-Allow-Origin *;
           add_header Access-Control-Allow-Methods GET;
           add_header Access-Control-Allow-Headers X-Requested-With,content-type;
           add_header Access-Control-Allow-Credentials true;
           root /var/www/webviews/app/public;
       }

        location ^~ /app {
                #rewrite ^/noen(/.*)$ $1 break;
                proxy_pass http://app/;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
                proxy_set_header Host $host;
                proxy_set_header X-Real-Ip $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
        }

}
server {
    if ($host = example.test.at) {
        return 301 https://$host$request_uri;
    } # managed by Certbot



        listen 80 ;
        server_name example.test.at;
    return 404; # managed by Certbot
}

您在我的 Nginx 配置中发现任何问题吗?

【问题讨论】:

    标签: node.js express nginx


    【解决方案1】:

    我错过了文章的位置部分,其中 (.*) 处理参数(子路径):

        location ~^/article/(.*) {
                proxy_pass http://noen;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
                proxy_set_header Host $host;
                proxy_set_header X-Real-Ip $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
        }
    

    【讨论】:

      猜你喜欢
      • 2013-08-03
      • 2017-12-21
      • 2013-02-15
      • 2013-11-05
      • 2020-09-11
      • 1970-01-01
      • 1970-01-01
      • 2014-09-08
      • 1970-01-01
      相关资源
      最近更新 更多