K
K
kr_ilya2019-06-02 13:25:44
Nginx
kr_ilya, 2019-06-02 13:25:44

How to specify the root address for express?

Launched express server at 127.0.0.1:3000 and proxy it to 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;
    }
}


And if you turn to the site to site.ru/api, then express perceives it as a call to the address /api/ and I need it to take this address as the root / that is, instead of cannot get /api/, it returns what the server gives in
app.get('/', function(req, res){

}

I think this is due to the fact that the express api is running in the root/api/server.js directory and the site itself is in root/site

Answer the question

In order to leave comments, you need to log in

1 answer(s)
S
SagePtr, 2019-06-02
@kr_ilya

In nginx, specify a slash at the end of the proxy_pass address:
It differs in that if you specify a path in the uri in the proxy_pass (in this case, the path /) - then nginx will perform path conversion and /api/ reflect on /, and not pass the request uri as is .

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question