systemctl stop firewalld.service
systemctl start firewalld.service
systemctl restart firewalld.service
查看防火墙状态
firewall-cmd --state
查看监听的端口
netstat -lnpt
检查端口被哪个进程占用
netstat -lnpt | grep 8888
查看进程的详细信息
ps 8888
### 单机部署Nginx
#### 拉取Nginx镜像
拉取Nginx镜像,版本使用1.22.0
docker pull nginx:1.22.0
查看拉取镜像
docker images
镜像拉取成功则如下图所示
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/1ea02c65c16945c5b0a04deb3ec4d00e.png#pic_center)
#### 创建主本地目录
创建配置目录
mkdir -p /data/nginx/conf
创建日志目录
mkdir -p /data/nginx/log
创建前端显示目录
mkdir -p /data/nginx/html
#对nginx本地文件进行递归赋权
chmod -R 755 /data/nginx
如下图
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/9f227d8d9da549769fa86c0b241b2f14.png#pic_center)
#### 部署Nginx容器
##### 1.生成容器
先简单启动容器
docker run -p 80:80 --name nginx -d nginx:1.22.0
进入容器内部
docker exec -it 容器id /bin/bash
##### 2.复制容器配置到宿主机
将容器nginx.conf文件复制到宿主机
docker cp nginx:/etc/nginx/nginx.conf /data/nginx/conf/nginx.conf
将容器conf.d文件夹下内容复制到宿主机
docker cp nginx:/etc/nginx/conf.d /data/nginx/conf/conf.d
将容器中的html文件夹复制到宿主机
docker cp nginx:/usr/share/nginx/html/index.html /data/nginx/html
docker cp nginx:/usr/share/nginx/html/50x.html /data/nginx/html
##### 3.重启容器
使用数据卷重启nginx容器
docker run -p 80:80 --name nginx -v /data/nginx/conf/nginx.conf:/etc/nginx/conf/nginx.conf -v /data/nginx/conf/conf.d:/etc/nginx/conf.d -v /data/nginx/log:/var/log/nginx -v /data/nginx/html:/usr/share/nginx/html -d nginx:1.22.0
查看容器是否启动成功
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/5d9b97315919430dbae9b5d1a62b6237.png#pic_center)
##### 4.测试验证
访问服务器ip:80端口(请先保证防火墙的端口已经打开,或者已经关闭),如下图所示,则安装成功。
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/90f4f12cceb54488b58ebbf950b05d2b.png#pic_center)
##### 5.Nginx配置
进入本地宿主机配置目录,由于我们启用的是include模式,所以在内部创建了conf.d目录
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/3f3b3886d95c4a3b99698687bfa772f3.png#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/797e8bb7b0f149e3b7c1647bc1937aaf.png#pic_center)
我们设置一个简单测试的配置,默认只有一个`default.conf`配置文件,如果有其他配置需要可以在conf.d目录下继续添加配置,我们在这里增加一个`mydoc.conf`的配置文件
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/a2b49dffb7624f3daefbdd5f3dfd750c.png#pic_center)
**配置mydoc.conf**
server {
listen 8001;
listen [::]:8001;
server_name localhost;
location / {
root /usr/share/nginx/html/mydoc;
index index.html index.htm;
}
}
**配置default.conf**
server {
listen 80;
listen [::]:80;
server_name localhost;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html/home;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html/home;
}
# 配置mydoc的测试代理
location /mydoc {
proxy_pass http://127.0.0.1:8001/;
proxy_set_header Host $host;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html/mydoc;
# #fastcgi_pass 127.0.0.1:9000;
# fastcgi_pass 192.168.2.103:9000;
# fastcgi_index index.php;
# #fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# #fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
在/data/nginx/html的目录下创建对应的mydoc目录,并在目录内创建一个index.html,我们这边直接复制根目录下的index.html进行一些修改作为标识,如下图:
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/cf1f78ccec834d258fd6cbd060953c9d.png#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/53367f1c0cb44b1686e940362c9a4f6e.png#pic_center)
构建完成后,我们需要重启Nginx容器,这里多提一点,我们在使用二进制部署的Nginx时,会使用`Nginx -s reload`的重载命令,那么Docker部署的Nginx的重载命令如下:
docker exec -it [容器id/容器名称] nginx -s reload
执行完毕后,我们测试访问
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/9f1ad0b6a5da45178158460ebb3cbca6.png#pic_center)
至此Nginx简单的单机部署完成。后续大家可以在部署好的容器进行配置修改,以适应新的服务需求。
### 自定义配置模块部署
Nginx之所以能够适应很多复杂的应用场景,在于他的具有扩展配置模块的能力。开发者根据业务场景组合配置扩展模块就变得尤为重要。开发者往往需要编译配置Nginx的很多扩展模块,比如stream、http\_stub\_status\_module、http\_ssl\_module等,来适应变化的需求场景。
由于直接使用Docker部署的Nginx本身就开启可很多模块。虽然这些模块很多有用,但是没用到的也很多。如下图:
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/efe68929203d46758ef51caf99639ab0.png#pic_center)
如果觉得以上这些开启的模块够用,那么可以直接使用。
#### 1.自制对应镜像
我们使用Dockerfile制作定制化的Nginx镜像,这里提供两种Dockerfile
**编译好的Nginx直接打包成镜像**
一般用于已经有nginx服务的情况,直接将以前的编译过的包直接封装进入Docker镜像中就可以了,代码如下:
使用Centos7作为基础镜像
FROM centos:7
安装必要的工具
RUN yum -y update && yum -y install tar && yum clean all
将已编译好的 Nginx 文件复制到容器中
COPY nginx.tar /usr/local/
进入 Nginx 安装目录
WORKDIR /usr/local/
解压 Nginx 包
RUN tar -xvf nginx.tar