Nginx反向代理以及负载均衡配置

释放双眼,带上耳机,听听看~!

项目地址:http://git.oschina.net/miki-long/nginx

前提:最近在研究nginx的用法,在windows上小试了一下,由于windows下不支持nginx缓存配置,所以本文主要是讲nginx,以及反向代理与负载均衡。

 

【一、为什么要使用nginx】

要回答为什么要使用nginx,那就先说说nginx能做些什么。

首先,nginx能做反向代理,那么什么是反向代理呢,举个栗子,我想在本地使用 www.mickey.com 的域名去访问 www.taobao.com。那么这个时候我们就可以通过nginx去实现。

再者,nginx能实现负载均衡,什么是负载均衡呢?就是我的项目部署在不同的服务器上,但是通过统一的域名进入,nginx则对请求进行分发,减轻了服务器的压力。

在上面这两种情况下,nginx服务器的作用都只是作为分发服务器,真正的内容,我们可以放在其他的服务器上,这样来,还能起到一层安全隔壁的作用,nginx作为隔离层。

其次,nginx还能解决跨域的问题。

 

【二、、nginx安装】

   在 http://nginx.org/ 下载对应版本的nginx

在 nginx 的目录下使用 start nginx 或者 双击 nginx.exe 打开nginx

 

【三、nginx配置属性说明】

    


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
1#全局设置
2main
3# 运行用户
4user www-data;    
5# 启动进程,通常设置成和cpu的数量相等
6worker_processes  1;
7# 注意:分配到不同的配置文件---(类似搭建Tomcat集群,可能有多个文件分开配置nginx2.conf,nginx3.conf)
8#include vhost/*.conf;
9
10# 全局错误日志及PID文件
11error_log  /var/log/nginx/error.log;
12pid        /var/run/nginx.pid;
13
14# 工作模式及连接数上限
15events {
16    use epoll; #epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能
17    worker_connections 1024; #单个后台worker process进程的最大并发链接数
18    # multi_accept on;
19}
20
21#设定http服务器,利用它的反向代理功能提供负载均衡支持
22http {
23    #设定mime类型,类型由mime.type文件定义
24    include       /etc/nginx/mime.types;
25    default_type  application/octet-stream;
26    #设定日志格式
27    access_log    /var/log/nginx/access.log;
28
29    #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,
30    #必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.
31    sendfile        on;
32    #将tcp_nopush和tcp_nodelay两个指令设置为on用于防止网络阻塞
33    tcp_nopush      on;
34    tcp_nodelay     on;
35    #连接超时时间
36    keepalive_timeout  65;
37
38    #开启gzip压缩
39    gzip  on;
40    gzip_disable "MSIE [1-6]\.(?!.*SV1)";
41
42    #设定请求缓冲
43    client_header_buffer_size    1k;
44    large_client_header_buffers  4 4k;
45
46    include /etc/nginx/conf.d/*.conf;
47    include /etc/nginx/sites-enabled/*;
48
49    #设定负载均衡的服务器列表
50    upstream mysvr {
51        #weigth参数表示权值,权值越高被分配到的几率越大
52        #本机上的Squid开启3128端口
53        server 192.168.8.1:3128 weight=5;
54        server 192.168.8.2:80  weight=1;
55        server 192.168.8.3:80  weight=6;
56    }
57
58
59    server {
60        #侦听80端口
61        listen       80;
62        #定义使用www.xx.com访问
63        server_name  www.xx.com;
64
65        #设定本虚拟主机的访问日志
66        access_log  logs/www.xx.com.access.log  main;
67
68        #默认请求
69        location / {
70            root   /root;      #定义服务器的默认网站根目录位置
71            index index.php index.html index.htm;   #定义首页索引文件的名称
72
73            fastcgi_pass  www.xx.com;
74            fastcgi_param  SCRIPT_FILENAME  $document_root/$fastcgi_script_name;
75            include /etc/nginx/fastcgi_params;
76        }
77
78        # 定义错误提示页面
79        error_page   500 502 503 504 /50x.html;  
80            location = /50x.html {
81            root   /root;
82        }
83
84        #静态文件,nginx自己处理
85        location ~ ^/(images|javascript|js|css|flash|media|static)/ {
86            root /var/www/virtual/htdocs;
87            #过期30天,静态文件不怎么更新,过期可以设大一点,如果频繁更新,则可以设置得小一点。
88            expires 30d;
89        }
90        #PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI默认配置.
91        location ~ \.php$ {
92            root /root;
93            fastcgi_pass 127.0.0.1:9000;
94            fastcgi_index index.php;
95            fastcgi_param SCRIPT_FILENAME /home/www/www$fastcgi_script_name;
96            include fastcgi_params;
97        }
98        #设定查看Nginx状态的地址
99        location /NginxStatus {
100            stub_status            on;
101            access_log              on;
102            auth_basic              "NginxStatus";
103            auth_basic_user_file  conf/htpasswd;
104        }
105        #禁止访问 .htxxx 文件
106        location ~ /\.ht {
107            deny all;
108        }
109
110    }
111
112    #第一个虚拟服务器
113    server {
114        #侦听192.168.8.x的80端口
115        listen       80;
116        server_name  192.168.8.x;
117
118        #对aspx后缀的进行负载均衡请求
119        location ~ .*\.aspx$ {
120            root   /root;#定义服务器的默认网站根目录位置
121            index index.php index.html index.htm;#定义首页索引文件的名称
122
123            proxy_pass  http://mysvr;#请求转向mysvr 定义的服务器列表
124
125            #以下是一些反向代理的配置可删除.
126            proxy_redirect off;
127
128            #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
129            proxy_set_header Host $host;
130            proxy_set_header X-Real-IP $remote_addr;
131            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
132            client_max_body_size 10m;    #允许客户端请求的最大单文件字节数
133            client_body_buffer_size 128k;  #缓冲区代理缓冲用户端请求的最大字节数,
134            proxy_connect_timeout 90;  #nginx跟后端服务器连接超时时间(代理连接超时)
135            proxy_send_timeout 90;        #后端服务器数据回传时间(代理发送超时)
136            proxy_read_timeout 90;         #连接成功后,后端服务器响应时间(代理接收超时)
137            proxy_buffer_size 4k;             #设置代理服务器(nginx)保存用户头信息的缓冲区大小
138            proxy_buffers 4 32k;               #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
139            proxy_busy_buffers_size 64k;    #高负荷下缓冲大小(proxy_buffers*2)
140            proxy_temp_file_write_size 64k;  #设定缓存文件夹大小,大于这个值,将从upstream服务器传
141        }
142    }
143}
144

1
2

2

 

【四、nginx反向代理】

   本地起两个项目,源码在此。

分别在这两个文件夹下面运行

 Nginx反向代理以及负载均衡配置


1
2
3
1npm install
2node server.js
3

 

在浏览器输入

本机ip:4789

本机ip:5789

可以访问到这两个页面

Nginx反向代理以及负载均衡配置

Nginx反向代理以及负载均衡配置

接着我们想使用

test.nginx.com访问到 页面5789

test.nginx.com/bug 访问到页面5789

 

则我们首先需要配置hosts

win 下hosts 的地址为 C:\Windows\System32\drivers\etc

我们需要在hosts文件里面添加如下配置

 


1
2
1172.18.144.23 test.nginx.com
2

 

然后在 nginx 的 http 模块上添加一个 server


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1​​​​​​​
2
3server {
4        listen       80;
5        server_name  test.nginx.com;
6        
7        location / {
8            proxy_pass   http://172.18.144.23:4789/;
9        }
10
11        location /buy {
12            proxy_pass   http://172.18.144.23:5789/;
13        }                
14
15        error_page   500 502 503 504  /50x.html;
16        location = /50x.html {
17            root   html;
18        }
19
20    }
21
22

然后重启nginx

在浏览器输入 test.nginx.com

Nginx反向代理以及负载均衡配置

在浏览器输入 test.nginx.com/bug

 

Nginx反向代理以及负载均衡配置

反向代理就这样子啦。

 

【五、nginx负载均衡】

 在nginx中配置http

首先配置负载均衡的服务

在http模块中添加如下配置


1
2
3
4
5
1upstream webservers {
2        server 172.18.144.23:4789 weight=10;
3        server 172.18.144.23:5789 weight=10;
4    }
5

 

把server改为

 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1server {
2        listen       80;
3        server_name  test.nginx.com;
4        
5        location / {
6            proxy_pass   http://webservers;
7        }
8
9        location /buy {
10            proxy_pass   http://172.18.144.23:5789/;
11        }            
12
13        error_page   500 502 503 504  /50x.html;
14        location = /50x.html {
15            root   html;
16        }
17
18    }
19

 

在浏览器输入 test.nginx.com,刷新,我们可以看到两种页面,说明nginx已经把我们的请求分发到不同的地方去了。

Nginx反向代理以及负载均衡配置

Nginx反向代理以及负载均衡配置

原文:https://www.cnblogs.com/Miss-mickey/p/6734831.html

给TA打赏
共{{data.count}}人
人已打赏
安全经验

Google Adsense 技巧提示100条

2021-10-11 16:36:11

安全经验

安全咨询服务

2022-1-12 14:11:49

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索