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

-->在容器环境中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#创建反代配置文件 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配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
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容器中:

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

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

1
2
3
4
5
6
7
8
9
10
11
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配置文件增加以下配置

1
2
3
server { ... client_max_body_size 0; ... }