一、前言

我们知道,为了安全考虑,我们一般会设置反向代理,用来屏蔽应用程序真实的IP和端口号。在Linux系统上最常用的反向代理就是Nginx。本篇文章中,我们会通过Docker容器设置反向代理。

二、运行Nginx容器

1、获取Nginx镜像
要运行容器,首先需要有相应的镜像,使用下面的命令拉取NGINX镜像:

docker pull nginx

2、运行Nginx容器
获取Nginx镜像之后,我们就可以根据镜像来运行容器

docker run --name=nginx -d -p 80:80 nginx

上面命令的解释如下:

--name:设置容器的名称。
-d:表示在后台运行容器。
-p:指定端口映射。4030是宿主机的端口,80是Nginx容器内部的端口。
nginx:表示根据nginx镜像运行容器。

然后在浏览器里面访问: http://ip

三、设置反向代理

配置反向代理,我们需要修改Nginx的配置文件。在Nginx的配置文件里面设置反向代理的HTTP地址。

要修改Nginx的配置文件,首先需要进入Nginx容器里面,使用下面的命令进入容器里面

docker exec -it nginx /bin/bash

上面命令的解释说明:

-it:表示分配一个伪终端。
nginx:表示容器的名称,这里也可以使用容器ID。
/bin/bash:表示对容器执行bash操作。

cd /etc/nginx/con.d/

vim default.conf

编辑如下:

server {
    listen 80;
    server_name yourdomain.com;  # 您的域名

    location / {
        proxy_pass yourdomain.com:port;
        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-Proto $scheme;
    }
}

如果需要开启https和自动跳转https:

server {
    listen 80;
    server_name yourdomain.com;  # 您的域名

    location / {
        return 301 https://$host$request_uri;
    }
}

server {
    listen 443 ssl;
    server_name yourdomain.com;  # 您的域名

    resolver 8.8.8.8;

    ssl_certificate /path/to/your/fullchain.pem;
    ssl_certificate_key /path/to/your/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384';

    location / {
        proxy_pass yourdomain.com:port;
        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-Proto $scheme;
    }
}

or DDNS

server {

listen 80;
server_name yourdomain.com;

location / {
    return 301 https://$host$request_uri;
}

}
server {

listen 443 ssl;
server_name yourdomain.com;

resolver 8.8.8.8;

ssl_certificate /path/to/your/fullchain.pem;
ssl_certificate_key /path/to/your/privkey.pem;

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers "TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";

location / {
set $backend_server "https://yourdomain_back.com:port";
resolver_timeout 5s; 

    proxy_pass $backend_server;
    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-Proto $scheme;
}

}

修改完成后重启容器

docker restart nginx

原文:链接