一、brew安装nginx
brew install nginx
brew info nginx
nginx #启动服务
nginx -s stop #停止服务(直接走)
nginx -s reload #重新加载
nginx -s reopen #重新启动
nginx -s quit #退出(处理完事情走)
open /opt/homebrew/etc/nginx/ #查看nginx安装目录
nginx安装位置:
/opt/homebrew/Cellar/nginx/1.21.1
配置文件路径:
/opt/homebrew/etc/nginx
内层nginx1 配置端口20001,/tu转发给springboot项目8071。
server {
listen 20001;#端口20001
client_max_body_size 500M;
server_name localhost;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
#gzip_http_version 1.0;
gzip_comp_level 8;
gzip_types gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary off;
gzip_disable "MSIE [1-6].";
#charset koi8-r;
# access_log /var/log/nginx/host.access.log main;
# error_log /var/log/nginx/error.log crit:
# 待部署的门户
add_header X-Frame-Options SAMEORIGIN;#iframe;
location /tu {
#本机启动了一个8071的springboot服务。
proxy_pass http://localhost:8071/;
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_set_header X-Nginx-Proxy true;
proxy_redirect off;
}
}
二、docker安装nginx
参考:zhuanlan.zhihu.com/p/114603487
1、拉取Nginx进行
docker pull nginx:latest
拉取完成查看:docker images
\
2、准备工作
先在主机创建工作文件夹,为了挂载配置和静态文件的访问使用
(2.1)
docker run -d --name gwsnginx nginx
-d标志告诉docker在后台运行分离模式的容器并打印新的容器ID。
使用--name标志时,可以在运行它们时为docker容器分配令人难忘的名称,
最后一个:nginx,应该是镜像的名字!!!
(2.2).把conf文件拷贝到宿主机器
# 拷贝容器内 Nginx 默认配置文件到本地当前目录下的 conf 目录($PWD 当前全路径)
docker cp gwsnginx:/etc/nginx/nginx.conf /Users/konnysnow/dockerroot/nginx/conf
docker cp gwsnginx:/etc/nginx/conf.d /Users/konnysnow/dockerroot/nginx/conf
(2.3).# 停止容器
docker container stop gwsnginx
(2.4).# 删除容器
docker container rm gwsnginx
# 在当前目录下创建目录:html 放静态文件
mkdir html
3、部署容器
docker run -d -p 30001:80 \
-p 30443:443 \
--name gwsnginx \
-v /Users/konnysnow/dockerroot/nginx/html:/usr/share/nginx/html \
-v /Users/konnysnow/dockerroot/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /Users/konnysnow/dockerroot/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /Users/konnysnow/dockerroot/nginx/logs:/var/log/nginx \
nginx
-d # 表示在一直在后台运行容器
-p 20001:80 # 对端口进行映射,将本地20001端口映射到容器内部的80端口
【宿主端口:容器内端口】
--name # 设置创建的容器名称
-v # 将本地目录(文件)挂载到容器指定目录;
【宿主目录文件:容器内目录文件】
--link answer-server:answerserver 这计划是指需要转向本机docker容器的别名【这个先去掉了。。。】
最后一个nginx ,是镜像名称!!!
外层nginx2 配置端口30001:转发给内层nginx-20001
(这里#docker内端口是80,对外宿主端口,其实是30001
#docker内,通过host.docker.internal:端口,访问宿主机器的服务)
server {
listen 80;#docker内端口是80,对外宿主端口,其实是30001
listen [::]:80;
server_name localhost;
#access_log /var/log/nginx/host.access.log main;
location /tu {
#docker内,通过host.docker.internal:端口,访问宿主机器的服务
proxy_pass http://host.docker.internal:20001/tu;
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_set_header X-Nginx-Proxy true;
proxy_redirect off;
}
}
三、测试
1、http://localhost:8071/user/getUserInfo/1
2、http://localhost:20001/tu/user/getUserInfo/1
3、http://localhost:30001/tu/user/getUserInfo/1
\
三层请求访问都ok。
好了,几个关键点:
- 1.docker访问宿主机器,host.docker.internal
- 2.-p 20001:80
【宿主端口:容器内端口】
- 3.-v /Users/konnysnow/dockerroot/nginx/logs:/var/log/nginx
【宿主目录文件:容器内目录文件】