rewrite及多upstream配置
转载自 :[https://blog.csdn.net/weixin_34361881/article/details/92569012](https://blog.csdn.net/weixin_34361881/article/details/92569012)
需求,目前的服务器做了nginx的负载均衡,实现目标
rewrite:test.ckl.tv/room/info/u…
请求上面的地址,rewrite到一个新的地址并且发往另一组upstream
1.目前配置如下:
cat ckl.conf
upstream qm_test {
server 127.0.0.1:81;
keepalive 100;
}
server {
server_name test.ckl.com;
access_log /app/local/log/nginx/ckl_access.log main;
proxy_headers_hash_max_size 51200;
proxy_headers_hash_bucket_size 6400;
location / {
proxy_pass http://qm_test/;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_connect_timeout 10;
proxy_send_timeout 10;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $http_x_forwarded_for;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $http_x_forwarded_for;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
2.新的配置如下
upstream ckl_backend {
server 10.10.1.23:80;
keepalive 100;
}
upstream qm_test {
server 127.0.0.1:81;
keepalive 100;
}
server {
server_name test.ckl.com;
access_log /app/local/log/nginx/ckl_access.log main;
proxy_headers_hash_max_size 51200;
proxy_headers_hash_bucket_size 6400;
#set $proxy_url qm_test;
rewrite ^/json/rooms/([^\/]+)/info.json$ /room/info/uid/$1 last;
location ~ ^/room/info/uid/([^\/]+)$ {
proxy_pass http://ckl_backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_connect_timeout 10;
proxy_send_timeout 10;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $http_x_forwarded_for;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $http_x_forwarded_for;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location / {
proxy_pass http://qm_test/;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_connect_timeout 10;
proxy_send_timeout 10;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $http_x_forwarded_for;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $http_x_forwarded_for;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
3.测试访问:
192.168.1.23 - - [03/Jun/2016:14:43:15 +0800] "GET /room/info/uid/2010101 HTTP/1.1" 200 8693 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36" -
发现请求的是/json/rooms/ 跳转到/room/info/uid/
请求的upstream http://ckl_backend;
一台机器同多项目
转载自
使用Nginx要在同一个域名下配置多个项目有两种方式:
- nginx按不同的目录分发给不同的项目
- 启用二级域名,不同的项目分配不同的二级域名
1.nginx按不同的目录分发给不同的项目:
server { listen 80; server_name example.com; location ^~ /project1 { proxy_pass http://localhost:8081; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location ^~ /project2 { proxy_pass http://localhost:8082; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location / { proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }}
这里配置了三个项目:
2.启用二级域名,不同的项目分配不同的二级域名
server { listen 80; server_name example.com; location / { proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }}
project1
server { listen 80; server_name project1.example.com; location / { proxy_pass http://localhost:8081; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }}
project2
server { listen 80; server_name project2.example.com; location / { proxy_pass http://localhost:8082; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }}
注意:这三个项目属于不同的域名,项目之间通过http访问会存在跨域问题。