2016-11-09 82 views
0

我有一臺Ubuntu Node.js服務器與我的http://www.example.com網站一起工作。 我用httpx:// localhost:3000來做我的測試,然後當我將它部署到Ubuntu, 我仍然必須輸入端口(www.example.com:3000)。我被告知實施一個 反向代理來刪除端口3000的要求。我安裝了nginx並添加了以下內容: sudo nano/etc/nginx/sites-available/default ----------刪除全部複製/粘貼----------- ---------------如何從http配置nginx到https

server { 
    listen 80; 
    server_name example.com; 
    location/{ 
     proxy_pass http://67.205.128.21:3000; 
     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; 
    } 
} 

這個工作,並刪除了要求進港3000 後來我發現我需要運行我用SSL /證書應用。 我能夠使nginx更改爲https://www.example.com:3000。 但現在我需要擺脫3000端口的要求。 我嘗試了與http :,使用相同的反向代理服務器設置,但沒有奏效。 如何配置nginx刪除端口3000的要求。 下面就是目前發生的事情,當我在瀏覽器中輸入:

http://67.205.128.21 - Works 
http://example.com - Redirects to https://example ; Error: Redirects too many times 
http://www.example.com - Redirects to https://example ; Error: Redirects too many times 
http://example.com:3000 - Works 
http://www.example.com:3000 - Works 

當前nginx的configureation:

server { 
    listen 80 default_server; 
    listen [::]:80 default_server; 
    server_name example.com www.example.com; 
    return 301 https://$server_name$request_uri; 
    location ~ /.well-known { 
      allow all; 
    } 
    # SSL configuration 
    # 
    listen 443 ssl default_server; 
    listen [::]:443 ssl default_server; 
    include snippets/ssl-example.com.conf; 
    include snippets/ssl-params.conf; 
server_name example.com; 
    location/{ 
    proxy_pass http://67.205.128.21:3000; 
    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; 
    } 
} 

回答

0

這應該工作:

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

    server_name example.com www.example.com; 

    return 301 https://$server_name$request_uri; 

    location ~ /.well-known { 
     allow all; 
    } 
} 

然後,無論是在同一文件或其他文件,請添加一個附加的服務器塊。

# SSL configuration 
# 
server { 
    listen 443 ssl default_server; 
    listen [::]:443 ssl default_server; 

    include snippets/ssl-example.com.conf; 
    include snippets/ssl-params.conf; 

    server_name example.com; 

    location/{ 
     proxy_pass http://67.205.128.21:3000; 
     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; 
    } 
} 

我認爲,問題是,你只有一個server塊,所以在執行重定向時,它屬於在同一臺服務器塊,然後再轉發。

+0

我現在得到一個「502錯誤的網關」。我對nginx一無所知,只是試圖按照引用的說明操作。我認爲我們正在接近解決方案。我該如何解決這個問題?謝謝,Pat –

+0

好的,那是進步。您的Node.js應用程序是否在端口3000上運行?檢查它正在運行。有可能不是。看看你的NGINX錯誤日誌文件(通常位於'/ var/log/nginx/error.log') –

+0

2016/11/10 12:41:30 [error] 7449#7449:* 42上游提前關閉連接來自上游的響應頭,客戶端:162.200.129.120,服務器:mysite10.com,請求:「GET/HTTP/1.1」,上游:「http://67.205.128.21:3000/」,主機:「mysite10.com」 2016/11/10 12:41:30 [error] 7449#7449:* 42上游過早關閉連接,同時從上游讀取響應頭,客戶端:162.200.129.120,服務器:mysite10.com,請求:「GET /favicon.ico HTTP/1.1「,上游:」http://67.205.128.21:3000/favicon.ico「,主機:」mysite10.com「,引用來源:」https://mysite10.com/「 –