1. 安装docker
  2. 安装nginx docker
  3. 在nginx容器中创建反代配置文件

-->在容器环境中

#创建反代配置文件
vi /etc/nginx/sites-available/reverse-proxy
或者:
vi /etc/nginx/sites-enabled/reverse-proxy
#配置如下
server {
    listen 80;//宿主机端口,也就是nginx容器的80端口
    server_name example1.com;//可以是子域名

    location / {
        proxy_pass http://localhost:80;//注意是容器的ip和端口,不是宿主机的(注意:容器使用宿主机未被占用的端口即可,不一定必须是80端口,只需要容器内项目暴露的端口是80就可以了)
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

server {
    listen 80;
    server_name example2.com;//可以是子域名

    location / {
        proxy_pass http://localhost:80;//注意是容器的ip和端口,不是宿主机的
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
  1. nginx -t 检查配置是否有效
  2. service nginx reload 重启nginx

以上配置后就可以用字域名的80端口访问项目了,下一步需要配置证书,使用https的方式访问

特别注意:在构建nginx容器时务必同时暴露80和443端口,否则无法配置SSL

配置SSL(在nginx容器中进行配置)

Certbot 申请证书过程
要在运行在 Docker 中的 Nginx 中配置两个项目都使用 HTTPS,您可以按照以下步骤进行配置:

  1. 准备 SSL 证书

    对于每个项目,您需要准备正确的 SSL 证书。如果您使用 Let's Encrypt,可以使用 Certbot 工具为每个项目获取证书。确保证书存储在主机上,并且您可以在 Nginx 配置中引用它们。

certbot --nginx -d <your_domain>
  1. _/etc/nginx/sites-enabled_目录下(没有就创建)为每个项目创建 Nginx 配置文件

    在 Nginx 宿主机上,为每个项目创建一个独立的 Nginx 配置文件。假设您有两个项目,分别为 Project1 和 Project2,可以创建两个配置文件,例如 project1.confproject2.conf

project1.conf配置:

server {
    listen 80;
    server_name project1.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name project1.example.com;

    ssl_certificate /etc/letsencrypt/live/project1.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/project1.example.com/privkey.pem;

    # 其他 SSL 配置

    location / {
        proxy_pass http://172.17.0.3:80;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        # 其他代理设置
    }
}

请确保替换 project1.example.comproject2.example.com 为您的实际域名,并将 SSL 证书和私钥的路径替换为正确的路径。

  1. 修改nginx.conf在http块最后添加:include /etc/nginx/sites-enabled/*;
  2. nginx -t 检查配置文件是否正确
  3. service nginx reload重启nginx

现在,您应该可以通过 HTTPS 访问两个项目,每个项目都有自己的 SSL 证书和独立的 Nginx 配置。项目1通过 https://project1.example.com 访问,项目2通过 https://project2.example.com 访问。

nginx容器中:

#nginx默认网页目录:
/usr/share/nginx/html
#nginx默认配置目录:
/etc/nginx/nginx.conf

如果单独的前端项目部署到nginx默认目录(容器的nginx),然后配置SSL,nginx配置文件可以参考如下方式写:

server {
    listen 80;
    server_name your domain;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name your domain;

    ssl_certificate /etc/letsencrypt/live/your domain/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your domain/privkey.pem;


    location / {
    root /usr/share/nginx/html;
        try_files $uri /index.html;
    }
}

当服务器443端口不可用时,web服务需要用到443端口,如何处理

  • 在Cloudflare上开启橙色云proxy,然后SSL启用FULL,如果不启用FULL,由于服务器开启了ssl,Flexible模式会被服务器拒绝,浏览器访问时会出现重定向次数过多提示!

当遇到无法上传大文件的时候,nginx web配置文件增加以下配置

server {
...
client_max_body_size 0;
...
}