【发布时间】:2014-09-17 21:57:07
【问题描述】:
所以现在我在 mysite:4300 上为我的后端应用程序提供服务,在 mysite:80 上提供我的静态站点。这没关系,但会导致一些问题,一个是 SSL 我必须获得两个签名证书,至少我认为。
另一个问题是 CORS,这不是一个大问题,我的 express 应用程序配置为允许 CORS,但我想在一个来源下提供所有服务。
这是我的 nginx 配置的外观。
我在 /etc/nginx/conf.d/mysite.com.conf 中创建
server {
listen 80;
server_name mysite.com;
location / {
proxy_pass http://localhost:3100; //node js port
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;
}
}
所以基本上上面允许我在端口:80 上为端口:3100 提供我的 nodejs 应用程序(使用 forever.js 运行)。
这显然会劫持我的静态网站,但我想知道如何将其配置为在 mysite.com/myApp 上提供服务
我的问题
如何将 nginx 配置为不是 mysite.com:80 而是 mysite.com:80/myApp 的代理,以便我可以在 mysite.com:80 上提供我的静态网站?
我是否需要重新考虑我是如何使用代理的,或者是否有我可以使用的配置方法?
也许我需要配置 DNS 记录,或者创建一个子域?
解决方案:我最终使用了一个子域,但我认为它几乎是相同的概念。
感谢@Peter Lyons,我有这个服务器块
server {
listen 80;
server_name app.mysite.com;
location / {
root /var/www/mySite/public_html;
proxy_pass http://localhost:3100;
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;
}
location @app {
proxy_pass http://localhost:3100;
}
}
在我添加根和位置@app 之前它无法工作,所以现在它在端口:80 上工作正常,因此不再有在 url 中暴露的端口号。希望我现在可以为此设置 SSL!
我想我会尝试像 mysite.com/myApp 一样提供它来测试它,将来可能会派上用场。
P.S 我也可以避免使用子域,因为它仍然被认为是跨域Are AJAX calls to a sub-domain considered Cross Site Scripting?
我可能希望允许我的应用与我的网站进行通信,避免使用 CORS 可能会更容易。也就是说,如果 mysite.com/myAPP 也不被视为 CORS。我们会看到。
【问题讨论】:
标签: node.js nginx reverse-proxy