所以现在我在mysite上提供我的后端应用程序:4300和我在mysite上的静态网站:80。这是可以的,但会导致一些问题,一个是SSL,我必须获得两个签名证书,至少我认为。
CORS的另一个问题是,我的快递应用配置为允许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。我们会看到。
答案 0 :(得分:1)
尝试:proxy_pass http://localhost:3100/myApp$uri;
,我认为应该做你想做的事。
当我希望nginx提供静态文件时,我使用try_files
,如下所示:
location / {
root /path/to/my/app/wwwroot;
try_files $uri $uri.html $uri/index.html @app;
}
location @app {
proxy_pass http://localhost:3100;
}