本文主要介绍如何在在CentOS上部署通过podman部署nginx
一,系统说明
基于CentOS 8和podman
二,部署
2.1 下载镜像
podman pull nginx:latest
podman images -a
1 2 REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/library/nginx latest 4bb46517cac3 2 days ago 137 MB
2.2 启动
podman volume create vo-nginx
podman run -d -it -e TZ=Asia/Shanghai -p 9999:80 -p 9998:443 -e TZ=Asia/Shanghai --name=nginx_devops -v vo-nginx:/etc/nginx/conf.d --restart=always docker.io/library/nginx
podman ps -a
1 2 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b28544ec1f5a docker.io/library/nginx:latest nginx -g daemon o... 4 seconds ago Up 3 seconds ago 0.0.0.0:9999->80/tcp,0.0.0.0:9998->443/tcp nginx_devops
#进入镜像处理
podman exec -it b28544ec1f5a bash
cd /etc/nginx/
2.3 注意
你需要注意,由于是通过容器部署,所以你不能再在nginx的config里配置127.0.0.1,你需要输入宿主机的ip
关于ipv6的支持,你需要针对监听的端口写两次,如下。
1 2 listen [::]:80; listen 80;
原因是nginx某个版本之后,如果你添加了ipv6的标示[::]:
,nginx的ipv6only
开关默认是on,就导致只监听ipv6来的数据。
3 其他实践
3.1 防火墙
linux下的各类防火墙SELinux、iptables端口策略、firewall-cmd
如果你不能关闭SELinux,请打开80端口:
1 setsebool -P httpd_can_network_connect 1
iptables
1 iptables -I INPUT -p tcp --dport 80 -j ACCEPT
firewall-cmd
1 2 firewall-cmd --zone=public --add-port=80/tcp --permanent firewall-cmd --reload
3.2 http2
你可能会遇到一切配置都是对的,但是就是不能转发,此时你可以尝试去除http2,注意,是把所有conf的http2都删除,漏删一个都不会有效。
1 2 3 4 5 6 server{ listen 80 http2; server_name localhost; rewrite ^ https://$host$request_uri? permanent; }
3.3 http转发https
1 rewrite ^ https://$host $request_uri ? permanent ;