@kr_ilya

Как указать корневой адрес для express?

Запустил express сервер по адресу 127.0.0.1:3000 и проксирую его в nginx
sites-enabled/default
map $sent_http_content_type $expires {
    "text/html"                 epoch;
    "text/html; charset=utf-8"  epoch;
    default                     off;
}

server {
    listen          80;
    access_log /var/log/nginx/access.log;
    return 301 https://$host$request_uri;          
    server_name site.ru www.site.ru;    # setup your domain here
    root /root/site;

    gzip            on;
    gzip_types      text/plain application/xml text/css application/javascript;
    gzip_min_length 1000;

    location / {
        expires $expires;

        proxy_redirect                      off;
        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;
        proxy_read_timeout          1m;
        proxy_connect_timeout       1m;
        proxy_pass                          http://127.0.0.1:3001; # set the adress of the Node.js instance here
    }

    location  /api/ {
        proxy_redirect                      off;
        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;
        proxy_read_timeout          1m;
        proxy_connect_timeout       1m;
        proxy_pass https://127.0.0.1:3000;
    }
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    access_log /var/log/nginx/access.log;                            
    ssl_certificate /etc/ssl/site.crt; 
    ssl_certificate_key /etc/ssl/site.key;         # the port nginx is listening on
    server_name site.ru www.site.ru;    # setup your domain here
    root /root/site;

    gzip            on;
    gzip_types      text/plain application/xml text/css application/javascript;
    gzip_min_length 1000;

    location / {
        expires $expires;

        proxy_redirect                      off;
        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;
        proxy_read_timeout          1m;
        proxy_connect_timeout       1m;
        proxy_pass                          http://127.0.0.1:3001; # set the adress of the Node.js instance here
    }

    location /api/ {
        proxy_redirect                      off;
        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;
        proxy_read_timeout          1m;
        proxy_connect_timeout       1m;
        proxy_pass https://127.0.0.1:3000;
    }
}



И если обратиться к сайту к site.ru/api то express воспринимает, это как обращение по адресу /api/ а мне нужно, что он этот адрес принимал за корень / т.е вместо cannot get /api/ возвращал то, что отдает сервер в
app.get('/', function(req, res){

}

Думаю, это связано с тем, что express api запущен в директории root/api/server.js а сам сайт в root/site
  • Вопрос задан
  • 93 просмотра
Решения вопроса 1
SagePtr
@SagePtr
Еда - это святое
В nginx указать в конце адреса proxy_pass слэш:
proxy_pass http://127.0.0.1:3000/;
Отличается тем, что если в proxy_pass указать в uri путь (в данном случае - путь /) - то nginx будет выполнять преобразование путей и /api/ отражать на /, а не передавать uri запроса как есть.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
18 апр. 2024, в 21:56
2000 руб./за проект
18 апр. 2024, в 21:00
150 руб./за проект