Как сохранить Nginx в восходящем направлении для ExpressJS маршрутов? - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть приложение express с двумя маршрутами: индексный маршрут (/) и маршрут статьи (/article).

Теперь я пытаюсь развернуть это приложение на сервере Ubuntu за Nginx.

У меня проблема в том, что индексный маршрут, доступный на https://servername/app, работает нормально, однако, если я вхожу в маршрут (начиная с индекса) через <a href="/article/param"></a>, восходящий поток /app теряется и Я перенаправлен на https://servername/article/param, который явно недоступен, так как я бы хотел перенаправить на 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 конфигурации?

1 Ответ

0 голосов
/ 22 апреля 2020

Я пропустил раздел местоположения для статьи, где (. *) Обрабатывает параметр (подпуть):

    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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...