先上配置文件。
worker_processes 2;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream ab{
server 10.32.4.202:7010;
server 10.32.4.202:7011;
}
server { #Nginx代理服务器
listen 80;
server_name 10.0.0.102;
location / {
proxy_set_header Host 10.32.4.202:7010;
proxy_pass http://ab;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
用户访问10.0.0.102,代理到10.32.4.202:7010或10.32.4.202:7011端口.(负载均衡)
10.32.4.202:7010对应10.0.0.100:8080端口
10.32.4.202:7011对应10.0.0.100:8081端口
10.0.0.100:8080和10.0.0.100:8081,是用户真正要访问的应用服务器.
为啥要经过一层10.32.4.202呢,因为公司有加密策略,所有上传的文件都要解密,所有下载的文件都要加密.请求必须要从这里过一下.
经过n次尝试,以上配置,可以访问的通了.
但是,proxy_set_header设置为7010端口,所有的请求都到了10.0.0.100:8080这台应用,就无法起到负载均衡的作用.
问题来了,要实现如下功能,应如何配置呢.
1,用户必须统一入口(10.0.0.0.102).
2,请求必须经过10.32.4.202(要加解密);
3,还能使用负载均衡功能.
感激不尽!
类似你上面的方法,自己内部再转发一次
server {
listen 8001 default_server;
server_name web1.example.com;
location / {
proxy_pass http://web1.local:80;
proxy_set_header Host web1.local:80;
}
}
server {
listen 8002 default_server;
server_name web2.example.com;
location / {
proxy_pass http://web2.local:80;
proxy_set_header Host web2.local:80;
}
}
server {
listen 8003 default_server;
server_name web3.example.com;
location / {
proxy_pass http://web3.local:80;
proxy_set_header Host web3.local:80;
}
}
upstream main {
server 127.0.0.1:8001;
server 127.0.0.1:8002;
server 127.0.0.1:8003;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://main;
}
}
如果需要设置目标服务器的配置,那么可以试试下面的
proxy_set_header Host $proxy_host:$proxy_port;
我又想到一个办法,就是在套一层nginx,
一台nginx只代理到一个服务器.
比如,一个代理到7010,一个代理到7011.
实际就2台应用,却用了3台nginx....感觉不太好.
这样配置,好了。
worker_processes 2;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream main {
server 127.0.0.1:8001;
server 127.0.0.1:8002;
}
server {
listen 80;
server_name 10.0.0.102;
location / {
proxy_pass http://main;
}
}
server {
listen 8001;
server_name 10.0.0.102;
location / {
proxy_pass http://10.32.4.202:7010;
proxy_set_header Host 10.32.4.202:7010;
}
}
server {
listen 8002;
server_name 10.0.0.102;
location / {
proxy_pass http://10.32.4.202:7011;
proxy_set_header Host 10.32.4.202:7011;
}
}
}
感谢oyljerry的耐心解答!
你这应该就是需要根据目标请求,header中设置它对应的host和port
proxy_set_header Host $host:$proxy_port;