2017-06-20 137 views
0

我有三個碼頭容器在不同的端口,並希望實現與每個容器的nginx反向代理,以便我可以導航到每個容器通過傳遞關鍵字而不是端口。喜歡而不是http://localhost:3000我想通過像http://localhost/app1與nginx和docker容器實現反向代理與不同的端口

我用下面的dockerfile創建了nginx圖像。

FROM nginx:alpine 
COPY nginx.conf /etc/nginx/nginx.conf 
COPY index.html usr/share/nginx/html 

和我的nginx的conf文件看起來像

worker_processes 1; 

事件{worker_connections 1024; }

HTTP {

sendfile on; 

upstream app1 { 
    server localhost:3000; 
} 

upstream app2 { 
    server localhost:3001; 
} 

server { 
    listen 3000; 

    location /app1 { 
     proxy_pass   http://localhost:3000; 
     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-Host $server_name; 
    } 
} 

server { 
    listen 3001; 

    location /app2 { 
     proxy_pass   http://localhost:3001; 
     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-Host $server_name; 
    } 
} 

}

而是從圖像生成nginx的容器之後。我看到了創建的容器。但是當我試圖訪問本地主機超時,所以nginx沒有運行或我錯過了什麼。我無法使用localhost/app1或app2加載容器,甚至localhost也無法運行。需要幫助。提前致謝。

回答

1

當您啓動容器時,您正在公開端口80和443,但我沒有看到您在nginx配置中偵聽這些端口。

請嘗試listen 80更換listen 3000,然後嘗試訪問localhost/app1

我也能看到你正在使用--link當您啓動泊塢窗容器。所以我認爲你應該使用app1app2而不是localhost。請讓我知道是否有什麼我錯過了,所以情況並非如此。您還必須確保您的應用程序可以在這些端口(3000和3001)上訪問。

而且你的2個位置應該是在同一臺服務器塊:

server { 
    listen 80; 

    location /app1 { 
     proxy_pass   http://app1:3000; 
     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-Host $server_name; 
    } 

    location /app2 { 
     proxy_pass   http://app2:3001; 
     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-Host $server_name; 
    } 
} 
+0

你的答案Aussourd感謝。我確實改變它聽80端口,但現在我得到500錯誤 – Jes

+0

@Jes它通常意味着你的應用程序崩潰。你應該檢查你的應用程序日誌 –