我有多个 NodeJS 应用程序在不同的端口上运行。
我需要他们每个人都使用 Nginx 通过子域工作,例如,而不是example.com:4001
用户可以在app1.example.com
我发现了两种似乎合适的解决方案,但是第二种解决方案还不起作用,即使它起作用,我也不知道它是否比第一种解决方案更安全。
我应该坚持解决方案 1 还是更加努力地实施解决方案 2?
解决方案 1 (作品)
server {
listen 80;
server_name app1.example.com;
location / {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_pass "http://127.0.0.1:4001";
}
}
解决方案 2 (尚未工作)
404 Not Found nginx
server {
listen 80;
server_name app1.example.com;
location = / {
proxy_pass http://127.0.0.1:4001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
操作系统:CentOS 6.9(最终版本)
Nginx的:1.12.2
自定义配置文件:/etc/nginx/conf.d/nodeapps.conf
答案1
server {}
正如文档中所述,每个子域需要一个块。http://nginx.org/en/docs/http/server_names.html
例如
server {
listen 80;
server_name app1.example.com;
location / {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_pass "http://127.0.0.1:4001";
}
}
server {
listen 80;
server_name app2.example.com;
location / {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_pass "http://127.0.0.1:4002";
}
}
我也强烈建议使用上游模块作为后端。http://nginx.org/en/docs/http/ngx_http_upstream_module.html