两个位置不适用于MERN应用程序的nginx
我有如下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
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