macm1安装nginx两种方式(brew、docker)

一、brew安装nginx

参考:blog.csdn.net/ncj39343790…

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

【宿主目录文件:容器内目录文件】