以下是我的负载平衡配置。我的其他服务器包含基于 nginx unicorn 的应用程序设置。当我尝试上述配置时,图像未加载。我总共有三台服务器,1 台用于负载平衡,另外 2 台用于应用程序。有人能帮我吗?我对此感到非常震惊。
upstream backend {
server ws1.10.10.1.1 fail_timeout=10;
server ws2.10.10.1.2 fail_timeout=5;
}
server {
listen 80;
client_max_body_size 2G;
server_name staging.xxxx.com;
include /etc/nginx/mime.types;
default_type application/octet-stream;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X_FORWARDED_PROTO $scheme;
proxy_set_header Host $host;
proxy_connect_timeout 3;
proxy_read_timeout 60;
proxy_send_timeout 60;
proxy_redirect false;
proxy_max_temp_file_size 0;
if (!-f $request_filename) {
proxy_pass http://backend;
}
}
location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|xml)$ { }
}
答案1
如果您想通过代理服务器提供服务,那么问题是,当 URI 匹配时,正则表达式位置块在 nginx 位置搜索中具有更高的优先级。因此,删除最后一个位置块或编写一个唯一的后备位置并使用try_files
。
open_file_cache max=10 inactive=10m;
open_file_cache_valid 5m;
open_file_cache_min_uses 1;
open_file_cache_errors on;
location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|xml)$ {
# other stuff
try_files /unreachable/path @fallback;
}
location / {
# other stuff
try_files /unreachable/path @fallback;
}
location @fallback {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X_FORWARDED_PROTO $scheme;
proxy_set_header Host $host;
proxy_connect_timeout 3;
proxy_read_timeout 60;
proxy_send_timeout 60;
proxy_redirect false;
proxy_max_temp_file_size 0;
proxy_pass http://backend;
}
答案2
我自己修复了这个问题,我应该在 application.rb 以及 seeeion_store.rb 中添加负载平衡 url,错误地添加了 localhost,因此无法获取图像,现在它已修复。