Nginx反向代理到另一个提供静态文件的Nginx服务器

前端之家收集整理的这篇文章主要介绍了Nginx反向代理到另一个提供静态文件的Nginx服务器 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我有一台Nginx服务器托管一个Web应用程序,当直接访问该应用程序时可以正常工作.其配置如下

  1. server {
  2. listen 8000 default_server;
  3. listen [::]:8000 default_server ipv6only=on;
  4. root /data/www/ ;
  5. server_name server1.com;
  6. location / {
  7. try_files $uri $uri/ =404;
  8. }
  9. location /app/ {
  10. }
  11. }

现在我必须从另一台Nginx服务器提供此应用程序,所以我设置了如下的反向代理

  1. server {
  2. listen 80 default_server;
  3. listen [::]:80 default_server ipv6only=on;
  4. root /data/www/ ;
  5. server_name server2.com;
  6. location / {
  7. try_files $uri $uri/ =404;
  8. }
  9. location /app/ {
  10. proxy_pass http://server1.com:8000/app/;
  11. }
  12. }

当我从server2访问应用程序时,出现以下错误,例如当我访问http:server2.com/app/css/app.css时

[error] 6601#0: *1 open() “/data/www/app/css/app.css” Failed (2: No such file or directory)

并且serv er1日志中没有错误.当我将Nginx设置为反向代理到server1时,为什么Nginx在server2中寻找静态文件

ProxyPass /app/ http:server1:8000/app/

ProxyPassReverse /app/ http:server1:8000/app/

我想念什么?

最佳答案
您的regexp位置与您的请求/app/css/app.css相匹配,并拦截来自代理的请求.这就是正则表达式位置的工作方式.为防止这种情况,请在您的应用位置使用^〜修饰符:

  1. location ^~ /app/ {
  2. proxy_pass ...;
  3. }

这将防止正则表达式位置匹配.

文档:http://nginx.org/r/location

猜你在找的Nginx相关文章