【Linux】Docker容器运行Nginx并实现反向代理
一、前言
我们知道,为了安全考虑,我们一般会设置反向代理,用来屏蔽应用程序真实的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
原文:链接
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。