如何在同一台服务器用nginx配置反代,让多个项目都可以用80端口访问,nginx及其它项目都在docker环境。
- 安装docker
- 安装nginx docker
- 在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;
}
}
- nginx -t 检查配置是否有效
- service nginx reload 重启nginx
以上配置后就可以用字域名的80端口访问项目了,下一步需要配置证书,使用https的方式访问
特别注意:在构建nginx容器时务必同时暴露80和443端口,否则无法配置SSL
配置SSL(在nginx容器中进行配置)
Certbot 申请证书过程
要在运行在 Docker 中的 Nginx 中配置两个项目都使用 HTTPS,您可以按照以下步骤进行配置:
- 准备 SSL 证书:
对于每个项目,您需要准备正确的 SSL 证书。如果您使用 Let's Encrypt,可以使用 Certbot 工具为每个项目获取证书。确保证书存储在主机上,并且您可以在 Nginx 配置中引用它们。
certbot --nginx -d <your_domain>
- 在_/etc/nginx/sites-enabled_目录下(没有就创建)为每个项目创建 Nginx 配置文件:
在 Nginx 宿主机上,为每个项目创建一个独立的 Nginx 配置文件。假设您有两个项目,分别为 Project1 和 Project2,可以创建两个配置文件,例如
project1.conf
和project2.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.com
和 project2.example.com
为您的实际域名,并将 SSL 证书和私钥的路径替换为正确的路径。
- 修改nginx.conf在http块最后添加:include /etc/nginx/sites-enabled/*;
- nginx -t 检查配置文件是否正确
- 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;
...
}