两个位置不适用于MERN应用程序的nginx

两个位置不适用于MERN应用程序的nginx,nginx,nginx-location,Nginx,Nginx Location,我有如下nginx配置: server { listen 80 default_server; listen[::]:80 default_server; server_name _; root /var/www/html/ericwu-trademarket/frontend/build; location /backend/ { proxy_pass http://localhost:8000; #backend in node

我有如下nginx配置:

server {
    listen 80 default_server;
    listen[::]:80 default_server;

    server_name _;
    root /var/www/html/ericwu-trademarket/frontend/build;

    location /backend/ {
       proxy_pass http://localhost:8000;   #backend in node js
       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;
    }

    location / {
       try_files $uri /index.html;       #front end in react js
    }
}
前端运行正常。但是通过像这样运行后端http://server-ip-address/backend它显示无法获取/backend/


我哪里可能弄错了?

很明显,您试图使用Websokets

说到最佳实践,最好在上游定义中定义后端服务。您试图将请求代理到“localhost:8000”,但localhost转换为ip 127.0.0.1。如果这不是nodejs应用程序的ip地址,那么您的配置不起作用是很正常的

Nginx希望后端服务器的完全限定域名(FQDN)或ip地址列表能够正常工作

也就是说,您的配置应该是:

http {
    upstream backend_server {
        #least_conn; #Loadbalancing method in case you want to use multiple backends
        #ip_hash; 
        server backend1.example.com:8000; #or IP address
       }
    
    server {
      server_name _;
      listen 80 default_server;
      listen[::]:80 default_server;
      root /var/www/html/ericwu-trademarket/frontend/build;
      
        location / {
            try_files $uri /index.html;
        }
        location /backend {
            proxy_pass http://backend_server;
            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;
            # WebSocket specific
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            # For long running HTTP requests, don't buffer up the
            # response from origin servers but send them directly to the client.
            proxy_buffering  off;

        }
    }
}

检查服务器中的UFW端口允许

检查UFW的状态:

sudo ufw status verbose
如果不将8000/tcp显示为允许,则允许:

sudo ufw allow 8000