Nginx配置疑问:双Node实例场景下Site2无法访问自有静态目录
解决Nginx配置让Site2访问自身静态资源的方法
当前你的/static/路径全部代理到了Site1的Node实例(3000端口),要让Site2能访问自身的静态资源,有两种常用方案,可根据实际情况选择:
方案1:直接映射Site2的本地静态文件目录
如果Site2的静态资源存放在服务器本地(比如/home/username/site2/public/目录),新增一个location规则专门处理Site2的静态请求:
location /site2/static/ { alias /home/username/site2/public/; expires 30d; # 可选,给静态资源设置缓存提升访问速度 add_header Cache-Control "public, max-age=2592000"; }
- 这里用
alias而非root,因为alias会把/site2/static/前缀替换成指定目录路径,比如请求/site2/static/css/style.css时,Nginx会读取/home/username/site2/public/css/style.css,匹配静态文件的目录结构。
方案2:代理到Site2的Node实例处理静态请求
如果Site2的Node实例(3001端口)本身负责处理/static/路径的请求,配置对应的代理规则:
location /site2/static/ { proxy_pass http://localhost:3001/static/; proxy_http_version 1.1; proxy_set_header Host $host; # 若不需要WebSocket支持,可去掉Upgrade相关头配置 }
修改后的完整Nginx配置示例
root /home/username/; index index.html index.htm index.nginx-debian.html; server_name siteurl.com; location / { root /home/username/web/; } location /site1/ { proxy_pass http://localhost:3000/site1/; 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 /site2/ { proxy_pass http://localhost:3001/site2/; 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; } # Site1的静态资源路径 location /static/ { proxy_pass http://localhost:3000$request_uri; } # 新增Site2的静态资源处理规则(二选一) # 方案1:本地文件映射 location /site2/static/ { alias /home/username/site2/public/; expires 30d; add_header Cache-Control "public, max-age=2592000"; } # 方案2:代理到Site2的Node实例 # location /site2/static/ { # proxy_pass http://localhost:3001/static/; # proxy_http_version 1.1; # proxy_set_header Host $host; # }
配置修改后,执行nginx -t检查配置合法性,确认无误后执行systemctl reload nginx让配置生效。
内容的提问来源于stack exchange,提问作者dadbean
相关产品推荐
相关产品推荐

