Mar*_*ska 14 javascript reverse-proxy nginx node.js express
我在Nginx反向代理后面运行了几个应用程序,其中一个是带有Express.js的节点服务器.我进行代理domain.com/demo/app/<path>到localhost:7003/<path>使用此Nginx的配置:
http {
...
server {
listen 80;
server_name domain.com;
...
location /demo/app {
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-Scheme $scheme;
rewrite ^/demo/app/?(.*) /$1 break;
proxy_pass http://localhost:7003;
}
...
}
}
Run Code Online (Sandbox Code Playgroud)
这很有效,并且app接收请求就像它的根源一样/.问题是app处理自己的静态文件,并可能请求路由,如css/app.css或images/image.jpg.但由于反向代理,这些实际上分别存在于/demo/app/css/app.css和/demo/app/images/image.jpg.
我已经通过让Nginx向Node传递一个自定义标头来解决这个问题,该标头指示根路径,节点服务器将其添加到所有后续请求的URL之前.但现在我的代码充满了这些根路径字符串.例如,我的后端模板的一部分:
link(rel='stylesheet', href="#{basePath}/css/base.css")
link(rel='stylesheet', href="#{basePath}/css/skeleton.css")
link(rel='stylesheet', href="#{basePath}/css/layout.css")
Run Code Online (Sandbox Code Playgroud)
处理这个问题的更优雅的方法是什么?难道没有办法让Nginx识别来自上游服务器的请求并自动将它们转发到该服务器吗?
我已经使nginx服务静态文件,甚至没有通过将location指令添加到应用程序的nginx配置文件(包含在nginx.conf中)将这些请求传递给节点:
location ~ /(img|js)/ {
rewrite ^(.*)$ /public/$1 break;
}
location / {
proxy_pass http://localhost:3000/;
...
}
Run Code Online (Sandbox Code Playgroud)
如果请求到/ img或/ js目录,nginx分别从/ public/img或/ public/js目录提供文件.所有其他请求都代理到节点.
如果需要,可以添加更多目录(比如/ css或/ views,如果你在那里存储你想在节点和浏览器中使用的模板),并且在这些目录中有任何目录结构,nginx只是prepends/public到它们和从那里获取文件,而您的节点应用程序甚至不知道它.
| 归档时间: |
|
| 查看次数: |
8706 次 |
| 最近记录: |