在部署nginx时遇到了坑,最主要的问题是在挂载文件和文件夹的时候不知道怎么挂载,现总结如下:
1. 拉去nginx镜像
docker pull nginx
2. (关键)查看nginx镜像里面配置文件、日志等文件的具体位置,只有找到镜像配置文件的路径,后面挂载文件和文件夹才能覆盖这些路径
- 以终端的方式打开镜像容器
docker exec -it nginx bash
- 找到镜像中nginx.conf配置文件
路径:/etc/nginx/nginx.conf
使用命令:cat /etc/nginx/nginx.conf 查看nginx.conf文件内容然后拷贝出来 - 找到default.conf配置文件
路径:/etc/nginx/conf.d/default.conf
用命令:cat /etc/nginx/conf.d/default.conf 查看default.conf文件内容然后拷贝出来 - 找到默认首页文件夹html
路径:/usr/share/nginx/html - 找到日志文件位置
路径:/var/log/nginx
然后退出容器终端 exit
3. nginx镜像启动容器mynginx并且挂载文件夹和文件到容器中
- 在Docker Desktop > Settings > Shared Drives 选中文件所在磁盘,如图 :
- 创建目录信息,结构如下
//4个文件夹
//放置nginx.conf文件,内容建议从nginx容器的终端中nginx.conf配置文件复制,这样子就保证了配置文件中的路径与镜像中配置文件的路径能保持一致
D:\docker\Nginx\data\nginx\conf
//放置default.conf文件,内容建议从nginx容器的终端中default.conf配置文件复制,这样子就保证了配置文件中的路径与镜像中配置文件的路径能保持一致
D:\docker\Nginx\data\nginx\conf.d
//首页页面
D:\docker\Nginx\data\nginx\html
//日志信息
D:\docker\Nginx\data\nginx\logs
- html目录下新建index.html
<html>
<head>
<title>Mynginx</title>
</head>
<body>
<h1>恭喜Docker搭建nginx成功,欢迎使用!</h1>
</body>
</html>
这里可能会存在编码问题导致页面乱码,在default.conf > server添加 charset ‘utf-8’ 可解决
4. 使用 nginx 镜像
docker run -d -p 80:80 --name nginx-web
-v D:\docker\Nginx\data\nginx\html:/usr/share/nginx/html
-v D:\docker\Nginx\data\nginx\conf/nginx.conf:/etc/nginx/nginx.conf
-v /root/nginx/logs:/var/log/nginx
-v D:\docker\Nginx\data\nginx\conf.d: /etc/nginx/conf.d nginx
命令说明:
- -p 80:80:将容器的80端口映射到主机的80端口(因此配置容器的nginx的监听端口时,一定要配置为80端口)
- –name nginx-web:将容器命名为nginx-web
- -v D:\docker\Nginx\data\nginx\html:/usr/share/nginx/html :将主机中当前目录下的html挂载到容器的html
- -v D:\docker\Nginx\data\nginx\conf/nginx.conf:/etc/nginx/nginx.conf:将主机中当前目录下的nginx.conf挂载到容器的/etc/nginx/nginx.conf
- -v /root/nginx/logs:/var/log/nginx:将主机中当前目录下的logs挂载到容器的/nginx
- -v D:\docker\Nginx\data\nginx\conf.d: /etc/nginx/conf.d:将主机中当前目录下的conf.d挂载到容器的/etc/nginx/conf.d
5. http://localhost:80 打开网页看看效果
6. 实现反向代理163网站
在conf.d下新建to163.conf文件,内容如下:
upstream uicps {
server www.163.com;
}
server {
listen 80;
server_name localhost;
root html;
index index.html index.htm index.php;
location / {
proxy_pass http://uicps;
proxy_redirect off;
proxy_set_header Host www.163.com; # $host;不能使用$host变量
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_max_temp_file_size 0;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
# $host 和 $http_host 都是你访问 nginx 的时候的 host ,并不是你反代的那个 host
}
打开浏览器输入server_name访问
7. 代理个人发布服务器的项目
在conf.d下新建server.person.conf文件
server {
listen 80;
server_name www.if404.com;
access_log /var/log/nginx/if404.access.log main;
error_log /var/log/nginx/if404.error.log error;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://宿主机IP:8080;
}
}
重启nginx,访问server_name即可。
版权声明:本文为weixin_42836274原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。