You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Nginx多端口HTTP转HTTPS及端口重定向配置方案咨询

Nginx多端口HTTP转HTTPS及端口重定向配置方案咨询

嗨,我来帮你搞定这个Nginx的重定向和代理配置问题!咱们一步一步来,确保每个需求都能精准满足:

先明确你的核心需求

  • 访问 http://my-domain.com:7547 → 自动跳转到 https://my-domain.com:7547
  • 访问 http://my-domain.com:3000https://my-domain.com:3000 → 自动跳转到 https://my-domain.com(不带端口)
  • 最终的HTTPS请求要能正确转发到你对应的后端服务(3000端口的UI和7547端口的其他服务)

前提准备

  1. 已经安装好Nginx服务器
  2. 已经为my-domain.com申请了有效的SSL证书(比如Let's Encrypt的免费证书)

具体配置步骤

打开你的Nginx配置文件(通常在/etc/nginx/nginx.conf或者/etc/nginx/sites-available/目录下新建配置文件,再软链到sites-enabled),添加以下几个server块:

1. 处理7547端口的HTTP转HTTPS

这个配置会监听所有访问http://my-domain.com:7547的请求,强制跳转到HTTPS版本:

server {
    listen 7547;
    server_name my-domain.com;

    # 301永久重定向到HTTPS的7547端口
    return 301 https://$server_name:$server_port$request_uri;
}

2. 处理3000端口的HTTP转HTTPS

监听http://my-domain.com:3000的请求,跳转到不带端口的HTTPS主域名:

server {
    listen 3000;
    server_name my-domain.com;

    return 301 https://$server_name$request_uri;
}

3. 处理3000端口的HTTPS转主域名HTTPS

如果用户直接访问https://my-domain.com:3000,也要跳转到主域名:

server {
    listen 3000 ssl;
    server_name my-domain.com;

    # 替换成你的SSL证书路径
    ssl_certificate /path/to/your/fullchain.pem;
    ssl_certificate_key /path/to/your/privkey.pem;

    return 301 https://$server_name$request_uri;
}

4. 主域名HTTPS服务(反向代理到3000端口的UI)

这个是最终的主域名入口,把HTTPS请求转发到你原来的UI服务:

server {
    listen 443 ssl;
    server_name my-domain.com;

    ssl_certificate /path/to/your/fullchain.pem;
    ssl_certificate_key /path/to/your/privkey.pem;

    # 反向代理配置,确保后端服务能正确获取请求信息
    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

5. 7547端口的HTTPS服务(反向代理到7547端口的服务)

处理跳转到https://my-domain.com:7547后的请求,转发到你的后端服务:

server {
    listen 7547 ssl;
    server_name my-domain.com;

    ssl_certificate /path/to/your/fullchain.pem;
    ssl_certificate_key /path/to/your/privkey.pem;

    location / {
        proxy_pass http://localhost:7547;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

配置完成后的验证步骤

  1. 检查配置文件是否有语法错误:
sudo nginx -t

如果输出test is successful就没问题啦。

  1. 重启Nginx让配置生效:
sudo systemctl restart nginx
# 或者用下面的命令(取决于你的系统)
# sudo service nginx restart

注意事项

  • 记得把配置里的/path/to/your/fullchain.pem/path/to/your/privkey.pem替换成你实际的SSL证书路径
  • 如果你的服务器防火墙开启了,要确保80、443、3000、7547这些端口都允许外部访问
  • 301重定向是永久重定向,搜索引擎会记住这个跳转,如果你只是临时测试,可以改成302临时重定向

备注:内容来源于stack exchange,提问作者idk_im_a_junior

火山引擎 最新活动