nginx 配置

305 阅读1分钟

rewrite及多upstream配置

转载自 :[https://blog.csdn.net/weixin_34361881/article/details/92569012](https://blog.csdn.net/weixin_34361881/article/details/92569012)

需求,目前的服务器做了nginx的负载均衡,实现目标

请求:www.ckl.com/json/rooms/…

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;

一台机器同多项目

转载自

blog.csdn.net/cc_want/art…allfirst_rank_v2~rank_v25-4-83780435.nonecase&utm_term=ngnix%20%E8%AE%BF%E9%97%AE%E5%A4%9A%E4%B8%AA%E7%9B%AE%E5%BD%95%E7%9A%84%E9%85%8D%E7%BD%AE

使用Nginx要在同一个域名下配置多个项目有两种方式:

  1. nginx按不同的目录分发给不同的项目
  2. 启用二级域名,不同的项目分配不同的二级域名

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访问会存在跨域问题。