解决Nginx反向代理汇集其他web服务不能访问子目录问题

需求

服务器上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;
            }      
    }

大功告成!

你可能感兴趣的:(nginx,前端,运维)