2017-11-03 159 views
0

對於nginx和NodeJS來說,我是非常新的。我試圖在Fedora 26機器上將我的nginx服務器配置爲端口3000上的快速服務器的反向代理。我遵循每一步,但出於某種原因,我出現504網關超時錯誤。nginx作爲快速服務器的反向代理504網關超時

這是我/etc/nginx/nginx.conf文件:

# For more information on configuration, see: 
# * Official English Documentation: http://nginx.org/en/docs/ 
# * Official Russian Documentation: http://nginx.org/ru/docs/ 

user nginx; 
worker_processes auto; 
error_log /var/log/nginx/error.log; 
pid /run/nginx.pid; 

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic. 
include /usr/share/nginx/modules/*.conf; 

events { 
    worker_connections 1024; 
} 

http { 
    log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 
         '$status $body_bytes_sent "$http_referer" ' 
         '"$http_user_agent" "$http_x_forwarded_for"'; 

    access_log /var/log/nginx/access.log main; 

    sendfile   on; 
    tcp_nopush   on; 
    tcp_nodelay   on; 
    keepalive_timeout 65; 
    types_hash_max_size 2048; 

    include    /etc/nginx/mime.types; 
    default_type  application/octet-stream; 

    # Load modular configuration files from the /etc/nginx/conf.d directory. 
    # See http://nginx.org/en/docs/ngx_core_module.html#include 
    # for more information. 
    include /etc/nginx/conf.d/*.conf; 
    include /etc/nginx/sites-enabled/*; 

    server { 
     listen  80 default_server; 
     listen  [::]:80 default_server; 
     server_name _; 
     root   /usr/share/nginx/html; 

     # Load configuration files for the default server block. 
     include /etc/nginx/default.d/*.conf; 

     location/{ 
      try_files $uri /index.html; 
     } 

     error_page 404 /404.html; 
      location = /40x.html { 
     } 

     error_page 500 502 503 504 /50x.html; 
      location = /50x.html { 
     } 
    } 

# Settings for a TLS enabled server. 
# 
# server { 
#  listen  443 ssl http2 default_server; 
#  listen  [::]:443 ssl http2 default_server; 
#  server_name _; 
#  root   /usr/share/nginx/html; 
# 
#  ssl_certificate "/etc/pki/nginx/server.crt"; 
#  ssl_certificate_key "/etc/pki/nginx/private/server.key"; 
#  ssl_session_cache shared:SSL:1m; 
#  ssl_session_timeout 10m; 
#  ssl_ciphers PROFILE=SYSTEM; 
#  ssl_prefer_server_ciphers on; 
# 
#  # Load configuration files for the default server block. 
#  include /etc/nginx/default.d/*.conf; 
# 
#  location/{ 
#  } 
# 
#  error_page 404 /404.html; 
#   location = /40x.html { 
#  } 
# 
#  error_page 500 502 503 504 /50x.html; 
#   location = /50x.html { 
#  } 
# } 

} 

正如你所看到的,我創建了網站,提供文件夾,然後在沒有啓用站點,鏈接,其中也包括在內。

內部網站,可我有這樣一個文件:nginx的的

# the IP(s) on which your node server is running. I chose port 3000. 
upstream musiciansdb { 
    server 127.0.0.1:3000; 
    keepalive 8; 
} 

# the nginx server instance 
server { 
    listen 0.0.0.0:80; 
    server_name musiciansdb.com musiciansdb; 
    access_log /var/log/nginx/musiciansdb.log; 

    # pass the request to the node.js server with the correct headers 
    # and much more can be added, see nginx config options 
    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_set_header X-NginX-Proxy true; 
     proxy_http_version 1.1; 
     proxy_set_header Upgrade $http_upgrade; 
     proxy_set_header Connection "upgrade"; 
      proxy_pass http://musiciansdb.com/; 
     proxy_redirect off; 

    } 

} 

狀態:

● nginx.service - The nginx HTTP and reverse proxy server 
    Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled) 
    Active: active (running) since Fri 2017-11-03 11:19:17 UTC; 2s ago 
    Process: 937 ExecReload=/bin/kill -s HUP $MAINPID (code=exited, status=0/SUCCESS) 
    Process: 981 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS) 
    Process: 980 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS) 
    Process: 979 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS) 
Main PID: 982 (nginx) 
    Tasks: 2 (limit: 4915) 
    CGroup: /system.slice/nginx.service 
      ├─982 nginx: master process /usr/sbin/nginx 
      └─983 nginx: worker process 

Nov 03 11:19:17 myserver.localdomain systemd[1]: Starting The nginx HTTP and reverse proxy server... 
Nov 03 11:19:17 myserver.localdomain nginx[980]: nginx: [warn] could not build optimal types_hash, you should increase either types_hash_max_size: 2048 or types_hasNov 03 11:19:17 myserver.localdomain nginx[980]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok 
Nov 03 11:19:17 myserver.localdomain nginx[980]: nginx: configuration file /etc/nginx/nginx.conf test is successful 
Nov 03 11:19:17 myserver.localdomain nginx[981]: nginx: [warn] could not build optimal types_hash, you should increase either types_hash_max_size: 2048 or types_hasNov 03 11:19:17 myserver.localdomain systemd[1]: nginx.service: Failed to read PID from file /run/nginx.pid: Invalid argument 
Nov 03 11:19:17 myserver.localdomain systemd[1]: Started The nginx HTTP and reverse proxy server. 

的netstat -lntp | grep的3000

tcp6 0 0 :::3000 :::* LISTEN 3524/node 

捲曲http://127.0.0.1:3000/響應與我的應用程序的HTML

我已經禁用了SElinux。

我在每次配置後都重新啓動了nginx服務器,甚至重啓了機器。如果我直接進入3000端口的web應用程序在那裏。

我錯過了什麼?

謝謝

+1

這兩臺服務器是否在同一主機上運行? (沒有虛擬機器,docker容器等) – JoshWillik

+0

在你提到的問題中,你提到你在'sites-available'文件夾中創建了一個'.conf'文件,但是你的nginx配置文件顯示你包含了'''enabled '。這是一個錯誤嗎? – JoshWillik

+0

@JoshWillik兩臺服務器都運行在同一臺主機上。我在'sites-available'內創建了一個'.conf'文件,然後在'sites-enabled'內建立了一個鏈接('ln -s') –

回答

1

這似乎是壞的路線。

proxy_pass http://musiciansdb.com/; 

在nginx中創建上游後端時,以後必須將其引用爲相同的名稱。

您有:

upstream musiciansdb { 
server 127.0.0.1:3000; 
keepalive 8; 
} 

你需要代理給後端與這條線(無.COM):

proxy_pass http://musiciansdb; 

否則,您試圖訪問musiciansdb.com(從外部,在80端口上,作爲客戶端瀏覽器會)。

另請注意,serverfault.com是系統管理問題的更好網站。

+0

嘿!就是這樣。我將其更改爲'proxy_pass http:// musiciansdb;'現在它可以工作。非常感謝你。 –