记一次nginx反向代理node服务

概述

朋友有个网站需要迁移到新服务器,服务器使用Nginx处理web请求,但是其中的一个客户反馈模块使用nodejs实现。而网站本身需要https加持和cdn加速,综合起来遇到了些麻烦。

操作流程

假设nodejs服务存在于7777端口,需要映射到主站domain.com的子域名feedback上,也就是 feedback.domain.com ,操作如下:

  1. 编辑nginx配置文件
vim /www/server/panel/vhost/nginx/feedback.conf
server{
    listen 443 ssl;
    ssl_certificate_key /www/server/panel/vhost/cert/domain.com/privkey.pem;
    ssl_certificate /www/server/panel/vhost/cert/domain.com/fullchain.pem;
    server_name feedback.domain.com;
    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-Nginx-Proxy true;
        proxy_pass https://127.0.0.1:7777;
        proxy_redirect off;
    }
}
  1. 重启Nginx
/etc/init.d/nginxd restart
  1. CDN还是常规配置,证书需要转换下

华为云cdn 证书转换为pem格式

openssl rsa -in privkey.pem -out hwpri.pem

总结

配置并不复杂,不过这也是在踩了无数个坑的成果。CDN缓存设置是针对url的,所以无法使用domain.com:7777的方式忽略缓存,子路径由于nodejs模块中有些文件是服务端文件,所以不能放在主网站路径,最后的办法只能是反向代理。