需求
服务器上docker运行了一个Nginx容器,其上已经配置了一个https服务(例如https://abc.com)。
服务器的其他容器上还运行有另外一些web服务,用了不同的端口,如8080,可以用http访问(如:http://abc.com:8080)。
为了提高安全性,希望用nginx将所有的web服务都可以通过https服务的子目录访问,如对8080端口的web服务可以通过https://abc.com/web1访问。
配置
在nginx的配置文件中增加:
location /web1 {
proxy_pass http://172.17.0.1:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
}
配置完成,重新启动nginx容器
发现可以访问根目录,但子目录不能访问。
让子目录可以被访问
修改nginx配置:
增加一个新的location /web1/用于处理子目录访问请求,并将其代理配置放在其中。
location /web1 {
proxy_pass http://172.17.0.1:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
location /web1/ {
proxy_pass http://172.17.0.1:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
}
配置完成,重新启动nginx容器
发现可以访问子目录,但子目录下的静态文件不能访问。
让子目录下的静态文件可以访问
再增加一级location用于处理静态文件请求:
完整的配置如下:
location /web1 {
proxy_pass http://172.17.0.1:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
location /web1/ {
proxy_pass http://172.17.0.1:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
location ~* \.(htm|html|jpg|jpeg|png|gif|ico|js|css|map)$ {
proxy_pass http://172.17.0.1:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
}
}
大功告成!