[英]How can I use nginx to forward incoming requests from a certain URL on port 80 to various docker applications
這是我的故事。
我正在運行一個Meteor.js應用,該應用在同一主機上啟動Docker容器。 Meteor.js設置為在端口8080上運行; 所有對“ /”的http和https請求都轉發到的位置。 我在/ etc / nginx / project / sites-available / site中的nginx配置如下:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html;
index index.html index.htm;
server_name **projectdomain.com**;
location / {
rewrite ^ https://$server_name$request_uri? permanent;
}
}
server {
listen 443 ssl spdy;
server_name **projectdomain.com**;
root html;
index index.html;
ssl_certificate /etc/nginx/ssl/project.crt;
ssl_certificate_key /etc/nginx/ssl/project.key;
ssl_stapling on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-$
add_header Strict-Transport-Security "max-age=31536000;";
if ($http_user_agent ~ "MSIE" ) {
return 303 https://browser-update.org/update.html;
}
location / {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header X-Forwarded-For $remote_addr;
if ($uri != '/') {
expires 30d;
}
}
}
我想要某個URL,例如projectdomain.com/4200指向projectdomain.com:4200,我的Docker容器將在其中偵聽。 我之所以要這樣做,是因為我的項目的目標受眾位於公司防火牆之后,該防火牆無法使他們訪問在端口4200上運行的應用程序。我的意思是,docker應用程序運行得很好,並且可以通過以下方式訪問:前往projectdomain.com:4200。 我只希望它橋接80或443以符合我當前的nginx設置。
當我做
location /4200 {
proxy_pass http://127.0.0.1:4200;
}
盡管我的Docker容器在4200上運行,但轉到projectdomain.com/4200會出現nginx 502錯誤。 這可能與netstat -tulpn輸出有關。
而我的流星項目似乎在127.0.0.1:8080上運行,則docker容器顯示正在::: 4200運行。 我認為,我得到502的原因是因為nginx將請求以/ 4200轉發到127.0.0.1:4200,但沒有任何運行(如netstat所述)。
問題是,我應該怎么做才能使docker在127.0.0.1:4200而不是::: 4200運行容器,或者我應該遵循其他方法嗎?
首先,proxy_pass應該在運行容器的主機上設置IP地址,而不是localhost,也不要設置127.0.0.1。 如果您有許多動態端口URL,要將它們映射到上游端口,請使用以下命令:
location ~ ^/(\d{4,})$ {
set $p_port $1;
proxy_pass http://HOSTIP:$p_proxy;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.