使用Nginx反向代理,可以通过不同的子域名访问到不同服务器的端口上下面来介绍怎么在Docker容器中使用Nginx反向代理。
一、在docker中使用Nginx反向代理
1.安装Docker
确保你的系统上已经安装了Docker。具体可以Docker官方网站上找到适合你系统的安装指南。
2.创建一个新的Docker容器
首先,创建一个新的Docker容器来运行Nginx。你可以使用以下命令创建一个新的容器:
1
docker run --name nginx-proxy -p 80:80 -d nginx
这将创建一个名为nginx-proxy
的容器,并将容器的80端口映射到主机的80端口上。
3.配置Nginx反向代理
现在,你需要修改Nginx的配置文件来设置反向代理规则。使用以下命令进入Nginx容器的Shell:
1
docker exec -it nginx-proxy bash
在容器中,你可以编辑Nginx的配置文件。默认情况下,Nginx的配置文件路径是/etc/nginx/nginx.conf
。
1
vi /etc/nginx/nginx.conf
在配置文件中,你可以添加反向代理规则,将不同的子域名指向不同的服务器端口。以下是一个示例配置,将toyong.tk
代理到http://172.16.41.133:8008
,将doman2.toyong.tk
代理到http://172.16.41.133:9000
:
1234567891011121314151617181920212223
events { # worker_connections 1024; ## Default: 1024}http { server { listen 80; server_name toyong.tk; location / { proxy_pass http://172.16.41.133:8008; } } server { listen 80; server_name doman2.toyong.tk; location / { proxy_pass http://172.16.41.133:9000; } }}
保存并退出配置文件。
4.重新加载Nginx配置
在Nginx容器中,使用以下命令重新加载配置:
1
nginx -s reload
5.配置DNS解析
最后,将你的子域名指向运行Nginx容器的主机的IP地址。你可以在你的DNS服务提供商的管理界面中进行配置。 将toyong.tk
和doman2.toyong.tk
解析到你运行Nginx容器的主机的IP地址上。
当配置完成后,当你通过浏览器访问toyong.tk
时,请求将被Nginx反向代理到http://172.16.41.133:8008
。当你访问doman2.toyong.tk
时,请求将被代理到http://172.16.41.133:9000
。如下图所示。
二、配置使用HTTPS协议
当然我们还可以配置使用HTTPS协议,可以按照以下步骤修改Nginx的配置来支持HTTPS
1.获取SSL证书
首先,你需要获取有效的SSL证书。你可以购买SSL证书,或者使用免费的证书颁发机构(如阿里云,腾讯云)来获取证书。
2.将证书和密钥文件复制到Nginx容器
将你的SSL证书和私钥文件复制到运行Nginx容器的主机上。你可以将它们复制到任意位置,例如/etc/nginx/certs/toyong.tk.pem
和/etc/nginx/certs/toyong.tk.key
。
3.修改Nginx配置
进入Nginx容器的Shell,编辑Nginx的配置文件:
12
docker exec -it nginx-proxy bashvi /etc/nginx/nginx.conf
修改配置文件,将HTTP的80端口重定向到HTTPS的443端口,并添加刚才复制的SSL证书和私钥的路径。以下是一个示例配置:
12345678910111213141516171819202122232425262728293031
events { # worker_connections 1024; ## Default: 1024}http { server { listen 80; server_name toyong.tk; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name toyong.tk; ssl_certificate /etc/nginx/certs/toyong.tk.pem; ssl_certificate_key /etc/nginx/certs/toyong.tk.key; location / { proxy_pass http://172.16.41.133:8008; } } server { listen 80; server_name doman2.toyong.tk; location / { proxy_pass http://172.16.41.133:9000; } }}
4.保存并退出配置文件。
重新加载Nginx配置:在Nginx容器中,使用以下命令重新加载配置:
1
nginx -s reload
现在,当你通过浏览器访问https://toyong.tk
时,请求将通过HTTPS协议传输,并被Nginx反向代理到http://http://172.16.41.133:8000
。你可以根据需要为其他子域名和代理规则重复这些步骤。请确保将相应的SSL证书和私钥文件路径正确设置在Nginx的配置中。
三、使用docker-compose管理 Nginx 反向代理
如果你觉得进入容器中操作很繁琐,那我推荐你使用docker-compose 的方式来管理 Nginx 反向代理和 HTTPS 配置。
1.创建docker-compose.yml 文件
首先在项目目录中创建一个名为 docker-compose.yml
的文件,并将以下内容添加到文件中:
12345678910
version: '3'services: nginx-proxy: image: nginx ports: - 80:80 - 443:443 volumes: - ./nginx.conf:/etc/nginx/nginx.conf - ./certs:/etc/nginx/certs
这个配置使用了官方的 Nginx 镜像,并将容器的 80 端口映射到主机的 80 端口,同时将容器的 443 端口映射到主机的 443 端口。
2.创建nginx.conf文件和certs目录
接下来,在docker-compose.yml
的同级别目录下创建一个名为 nginx.conf
的文件,并将以下内容添加到文件中:
12345678910111213141516171819202122232425262728
events { # worker_connections 1024; ## Default: 1024}http { server { listen 80; server_name toyong.tk; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name toyong.tk; ssl_certificate /etc/nginx/certs/toyong.tk.pem; ssl_certificate_key /etc/nginx/certs/toyong.tk.key; location / { proxy_pass http://172.16.41.133:8008; } } server { listen 80; server_name doman2.toyong.tk; location / { proxy_pass http://172.16.41.133:9000; } }}
在这个配置中,我们定义了 HTTP 的 80 端口的重定向规则,并为 HTTPS 的 443 端口指定了 SSL 证书和私钥的路径。并将 SSL 证书和私钥文件命名为 toyong.tk.pem
和toyong.tk.key
,并将它们放置在与 docker-compose.yml
文件相同的目录下的 certs
目录中。
3.启动容器
最后,通过运行以下命令启动 Nginx 反向代理容器:
1
docker-compose up -d
停留在世界边缘,与之惜别