Nginx 上的反向代理从一台服务器到另一台服务器
Reverse Proxy on Nginx from one server to another
我正尝试在 pm2
上 运行 访问 Sails
应用程序。应用程序 运行s 如果我直接从它所在的服务器的 IP 访问它 运行ning.
当我运行 Nginx 作为另一台服务器上的反向代理时,会发生以下情况:
当我在 origin.myserver.com
上使用以下配置时,它仍然有效:
server {
listen 80;
location / {
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_send_timeout 600;
proxy_read_timeout 600;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
proxy_connect_timeout 30s;
proxy_set_header Host $host;
proxy_pass http://dest.myserver:1337;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
但是,当我尝试从 Nginx 添加多个子目录时,它不起作用:
server {
listen 80;
location /auth {
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_send_timeout 600;
proxy_read_timeout 600;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
proxy_connect_timeout 30s;
proxy_set_header Host $host;
proxy_pass http://dest.myserver:1337;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
我收到的错误是:
2017/08/11 15:55:13 [error] 8304#0: *3 open() "/usr/share/nginx/html/locales/locale.js" failed (2: No such file or directory), client: IP, server: , request: "GET /locales/locale.js?v=1502466823352 HTTP/1.1", host: "REVERSE PROXY IP"
我通过以下配置解决了这个问题:
由于服务直接在Node/PM2
上运行,如果我们在位置路径后使用/
,子路径将不会被转发。
所以对于没有 Nginx 的应用 运行,我们使用 location /auth/
而不是 location /auth
。
我们还需要转发 headers 和数据。
如果被转发到的应用程序在 Nginx 上运行,如果我们使用 location /auth/
路径将被转发,即调用的服务将是 http://myserver.com:1337/auth
我的例子是:
server {
listen 80;
location /auth/ {
proxy_set_header Host origin.myserver.com/auth/;
proxy_pass http://dest.myserver.com:1337/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_send_timeout 600;
proxy_read_timeout 600;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
proxy_connect_timeout 300s;
add_header 'Access-Control-Allow-Origin' 'http://someother.domain.in';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'Authorization,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
}
我正尝试在 pm2
上 运行 访问 Sails
应用程序。应用程序 运行s 如果我直接从它所在的服务器的 IP 访问它 运行ning.
当我运行 Nginx 作为另一台服务器上的反向代理时,会发生以下情况:
当我在 origin.myserver.com
上使用以下配置时,它仍然有效:
server {
listen 80;
location / {
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_send_timeout 600;
proxy_read_timeout 600;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
proxy_connect_timeout 30s;
proxy_set_header Host $host;
proxy_pass http://dest.myserver:1337;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
但是,当我尝试从 Nginx 添加多个子目录时,它不起作用:
server {
listen 80;
location /auth {
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_send_timeout 600;
proxy_read_timeout 600;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
proxy_connect_timeout 30s;
proxy_set_header Host $host;
proxy_pass http://dest.myserver:1337;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
我收到的错误是:
2017/08/11 15:55:13 [error] 8304#0: *3 open() "/usr/share/nginx/html/locales/locale.js" failed (2: No such file or directory), client: IP, server: , request: "GET /locales/locale.js?v=1502466823352 HTTP/1.1", host: "REVERSE PROXY IP"
我通过以下配置解决了这个问题:
由于服务直接在Node/PM2
上运行,如果我们在位置路径后使用/
,子路径将不会被转发。
所以对于没有 Nginx 的应用 运行,我们使用 location /auth/
而不是 location /auth
。
我们还需要转发 headers 和数据。
如果被转发到的应用程序在 Nginx 上运行,如果我们使用 location /auth/
路径将被转发,即调用的服务将是 http://myserver.com:1337/auth
我的例子是:
server {
listen 80;
location /auth/ {
proxy_set_header Host origin.myserver.com/auth/;
proxy_pass http://dest.myserver.com:1337/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_send_timeout 600;
proxy_read_timeout 600;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
proxy_connect_timeout 300s;
add_header 'Access-Control-Allow-Origin' 'http://someother.domain.in';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'Authorization,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
}