本教程详细啰嗦,适合新手朋友。
需求:
1、三个容器,分别对应三个不同网站。容器内的端口根据自己情况。
- 8081 ---> 对应容器 blog.tag.gg 的 80 端口
- 8082 ---> 对应容器 web1.tag.gg 的 80 端口
- 8083 ---> 对应容器 web2.tag.gg 的 80 端口
- 访问 http://blog.tag.gg 或 https://blog.tag.gg 显示 “容器 blog.tag.gg”的内容。
- 访问 http://web1.tag.gg 或 https://web1.tag.gg 显示 “容器 web1.tag.gg”的内容。
- 访问 http://web2.tag.gg 或 https://web2.tag.gg 显示 “容器 web2.tag.gg”的内容。
如果是生产环境,操作前请做好备份或快照。
实现方法:(如果已在容器中部署了站点,则可以忽略这一步)
1、创建测试容器环境
如果要进入某个容器,可用如下命令:docker run --name blog.tag.gg -p 8081:80 -d nginx docker run --name blog.tag.gg -p 8081:80 -d nginx docker run --name blog.tag.gg -p 8081:80 -d nginx docker run --name blog.tag.gg -p 8081:80 -d nginx docker run --name blog.tag.gg -p 8081:80 -d nginx
docker run --name web1.tag.gg -p 8082:80 -d nginx
docker run --name web2.tag.gg -p 8083:80 -d nginx
2、创建后的容器情况如下,创建后可以用ip或域名加端口号可以访问到容器服务,例如 http://8.8.8.8:8081/ 或 http://blog.tag.gg:8081访问。能访问则说明正常。docker exec -it blog.tag.gg bash docker exec -it blog.tag.gg bash
宿主上执行命令“netstat -lunpt”可以看到如下:[root@blog-tag-gg ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7f407693d191 nginx "/docker-entrypoint.…" About an hour ago Up About an hour 0.0.0.0:8083->80/tcp, :::8083->80/tcp web2.tag.gg
dc631daf0120 nginx "/docker-entrypoint.…" About an hour ago Up About an hour 0.0.0.0:8082->80/tcp, :::8082->80/tcp web1.tag.gg
8d1e4e2212e5 nginx "/docker-entrypoint.…" 2 hours ago Up 2 hours 0.0.0.0:8081->80/tcp, :::8081->80/tcp blog.tag.gg
[root@blog-tag-gg ~]#
[root@blog-tag-gg ~]# netstat -lunpt
如图: 3、在宿主(服务器系统)中安装nginx。Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1375/sshd
tcp 0 0 0.0.0.0:8081 0.0.0.0:* LISTEN 3480/docker-proxy
tcp 0 0 0.0.0.0:8082 0.0.0.0:* LISTEN 4384/docker-proxy
tcp 0 0 0.0.0.0:8083 0.0.0.0:* LISTEN 4492/docker-proxy
tcp6 0 0 :::8081 :::* LISTEN 3486/docker-proxy
tcp6 0 0 :::8082 :::* LISTEN 4390/docker-proxy
tcp6 0 0 :::8083 :::* LISTEN 4498/docker-proxy
说明:
若系统已安装了nginx,可以跳过安装这一步。
若服务器中80和443已被其他服务占用,则无法安装,这个需要自己核实清楚(安装前建议做好备份或快照,万一安装出了问题还可以还原)
Centos安装nginx
Ubuntu安装nginxyum -y install nginx
4、配置nginx:sudo apt install nginx
找到nginx.conf配置文件,yum方式安装的nginx一半在“/etc/nginx/nginx.conf”。
在配置文件最后的一个“}”前面增加如下规则(添加的地方要正确,否则nginx无法启动,为了避免修改错误,操作前建议将nginx.conf文件复制备份一个)
如果多个站点,分别复制然后修改一下绑定的域名和反向代理的端口号即可。server
{
listen 80;
server_name blog.tag.gg;
#PROXY-START反向代理配置
location ^~ /
{
proxy_pass http://127.0.0.1:8083;
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 REMOTE-HOST $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_http_version 1.1;
# proxy_hide_header Upgrade;
add_header X-Cache $upstream_cache_status;
#Set Nginx Cache
set $static_fileqiDzCVTA 0;
if ( $uri ~* "\.(gif|png|jpg|css|js|woff|woff2)$" )
{
set $static_fileqiDzCVTA 1;
expires 1m;
}
if ( $static_fileqiDzCVTA = 0 )
{
add_header Cache-Control no-cache;
}
}
#PROXY-END 反向代理配置结束
#设置访问日志以及错误日志,具体路径更换为自己的
access_log /www/wwwlogs/blog.tag.gg.log;
error_log /www/wwwlogs/blog.tag.gg.error.log;
#日志结束
}
执行如下命令检测配置是否有问题。
若显示如下则表示配置没问题。nginx -t
重启nginx服务以便配置生效。[root@blog-tag-gg conf]# nginx -t
nginx: the configuration file /www/server/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /www/server/nginx/conf/nginx.conf test is successful
此时,使用http://blog.tag.gg和 http://web1.tag.gg 以及 http://web2.tag.gg 分别可以访问到对应容器里面内容了。(http)service nginx restart
但我们有时候需要https可以访问怎么操作呢?可以将上面代码替换为如下:
配置后参考上面步骤检测配置是否正确,若正确,然后重启nginx服务.server
{
listen 80;
listen 443 ssl http2;
server_name blog.tag.gg;
#SSL证书配置,证书文件更换为自己额。
#error_page 404/404.html;
ssl_certificate /www/blog.tag.gg.crt;
ssl_certificate_key /www/blog.tag.gg.pem;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
add_header Strict-Transport-Security "max-age=31536000";
error_page 497 https://$host$request_uri;
#PROXY-START反向代理配置
location ^~ /
{
proxy_pass http://127.0.0.1:8083;
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 REMOTE-HOST $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_http_version 1.1;
# proxy_hide_header Upgrade;
add_header X-Cache $upstream_cache_status;
#Set Nginx Cache
set $static_fileqiDzCVTA 0;
if ( $uri ~* "\.(gif|png|jpg|css|js|woff|woff2)$" )
{
set $static_fileqiDzCVTA 1;
expires 1m;
}
if ( $static_fileqiDzCVTA = 0 )
{
add_header Cache-Control no-cache;
}
}
#PROXY-END 反向代理配置结束
#设置访问日志以及错误日志,具体路径更换为自己的
access_log /www/wwwlogs/blog.tag.gg.log;
error_log /www/wwwlogs/blog.tag.gg.error.log;
#日志结束
}
重启后使用 http或https就可以访问了。如下: 至此,配置完成了,希望对您有帮助。
如果配置有问题,可以扫描如下添加“技术小学生”微信公众要回复问题,我看到后可以给与协助。
文章评论 本文章有个评论