Hello World!
Toggle navigation
Home
开发
运维部署
旧博客搬家
About Me
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Archives
Tags
Nginx反向代理
2018-06-28 12:45:18
37
0
0
lion
#CentOS安装nginx yum install http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.14.0-1.el7_4.ngx.x86_64.rpm #配置 ## # You should look at the following URL's in order to grasp a solid understanding # of Nginx configuration files in order to fully unleash the power of Nginx. # http://wiki.nginx.org/Pitfalls # http://wiki.nginx.org/QuickStart # http://wiki.nginx.org/Configuration # # Generally, you will want to move this file somewhere, and start with a clean # file but keep this around for reference. Or just disable in sites-enabled. # # Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples. ## # Default server configuration # server { listen 443 ssl default_server; listen [::]:443 ssl default_server; ssl on; ssl_certificate /etc/ssl/ever2010.crt; ssl_certificate_key /etc/ssl/ever2010.apache.key; # SSL configuration # # listen 443 ssl default_server; # listen [::]:443 ssl default_server; # # Note: You should disable gzip for SSL traffic. # See: https://bugs.debian.org/773332 # # Read up on ssl_ciphers to ensure a secure configuration. # See: https://bugs.debian.org/765782 # # Self signed certs generated by the ssl-cert package # Don't use them in a production server! # # include snippets/snakeoil.conf; root /var/www/html; # Add index.php to the list if you are using PHP index index.html index.htm index.nginx-debian.html; server_name _; #redirect main page to /blog #location =/ { # rewrite ^/$ /blog/ redirect; #} location / { proxy_pass http://127.0.0.1:9000/; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; proxy_redirect off; } # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # include snippets/fastcgi-php.conf; # # # With php7.0-cgi alone: # fastcgi_pass 127.0.0.1:9000; # # With php7.0-fpm: # fastcgi_pass unix:/run/php/php7.0-fpm.sock; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } #负载均衡 #设定http服务器,利用它的反向代理功能提供负载均衡支持 http { #设定mime类型,类型由mime.type文件定义 include /etc/nginx/mime.types; default_type application/octet-stream; #设定日志格式 access_log /var/log/nginx/access.log; #省略上文有的一些配置节点 #。。。。。。。。。。 #设定负载均衡的服务器列表 upstream mysvr { #weigth参数表示权值,权值越高被分配到的几率越大 server 192.168.8.1x:3128 weight=5; #本机上的Squid开启3128端口,不是必须要squid server 192.168.8.2x:80 weight=1; server 192.168.8.3x:80 weight=6; } upstream mysvr2 { #weigth参数表示权值,权值越高被分配到的几率越大 server 192.168.8.x:80 weight=1; server 192.168.8.x:80 weight=6; } #第一个虚拟服务器 server { #侦听192.168.8.x的80端口 listen 80; server_name 192.168.8.x; #对aspx后缀的进行负载均衡请求 location ~ .*.aspx$ { #定义服务器的默认网站根目录位置 root /root; #定义首页索引文件的名称 index index.php index.html index.htm; #请求转向mysvr 定义的服务器列表 proxy_pass http://mysvr ; #以下是一些反向代理的配置可删除. proxy_redirect off; #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP proxy_set_header Host $host; 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; #nginx跟后端服务器连接超时时间(代理连接超时) proxy_connect_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时) proxy_read_timeout 90; #设置代理服务器(nginx)保存用户头信息的缓冲区大小 proxy_buffer_size 4k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置 proxy_buffers 4 32k; #高负荷下缓冲大小(proxy_buffers*2) proxy_busy_buffers_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传 proxy_temp_file_write_size 64k; } } } #自定义502页(后端无法访问时错误页) error_page 502 /502.html; location = /502.html { root /var/www/err; } #高级 ##4-2、配置负载均衡和对后端服务健康检查 ###4-2-1、配置选项说明 nginx负载均衡是ngx_http_upstream_module模块的功能,需要在配置文件http块上下文中定义upstream块,指定一组负载均衡的后端服务器,然后在上面据说的proxy_pass中引用,就可以反向代理时实现负载均衡了。 ####server选项说明: 语法:server address [parameters]; paramerters: weight:负载均衡策略权重,默认为1; max_fails:允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误; fail_timeout:在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用,进行对后端服务器的健康状态检查; backup:当所有后端服务器都宕机时,可以指定代理服务器自身作为备份,对外提供维护提示页面; down:永久不可用。 upstream块里可以用多个server选项配置多个后端服务器,同时还可配置对后端服务器的健康状态检查,可以在server后面加上max_fails(proxy_next_upstream指定检查策略,默认为返回超时为失败)和fail_timeout参数实现;也可以用health_check选项来实现,health_check可以指定的参数较多,不过需要定义在location上下文中。 另外,可以指定代理服务器自身作为备份server,当所有后端服务器都宕机时,对外提供维护提示页面。 还可以指定负载均衡策略:主要有round_robin(加权轮询,默认)、hash、ip_hash、least_conn(最少连接)和least_time(最少响应时间,商业版本),策略定义在upstream上下文即可; ###4-2-2、配置操作 先在配置一个名为webserver的upstreat块,里面包含三个server:realserver1、realserver2和代理服务器自身,配置对后端服务器的健康状态检查、负载均衡策略;然后在location中的pxory_pass中引用该webserver组,配置如下: upstream webserver { #定义名为webserver的负载均衡组,在下面proxy_pass引用 #ip_hash; #ip_hash负载均衡策略,注意,当下面定义代理服务器为backu时,当后端服务器重新上线时,不能进行>正常转发 least_conn; #最少连接负载均衡策略 #least_time last_byte; #最少响应时间策略,商业版本 server 192.168.18.251 weight=2 max_fails=2 fail_timeout=2; #realserver1 权重2/两次检测失败,不向其转发/检查超时两秒为失败 server 192.168.18.252 weight=1 max_fails=2 fail_timeout=2; #realserver2 server 127.0.0.1:8080 weight=1 backup; #指定代理服务器自身作为备份server,当所有后端服务器都宕机时,对外>提供维护提示页面 } server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { proxy_pass http://webserver; #引用上面定义的upstream负载均衡组 } …… 然后再配置一个提供维护提示页面的虚拟主机,并创建提示页面,操作配置如下: server { #定义虚拟主机,当所有后端服务器都宕机时,使得代理服务器自身可以对外提供维护提示页面 listen 8080; server_name localhost; root /data/web/errorpage; index index.html; } [root@node2 ~]# mkdir -pv /data/web/errorpage [root@node2 ~]# echo "<h1>errorpage</h1>" >> /data/web/errorpage/index.html [root@node2 ~]# cat !$ ##4-3、配置缓存 Nginx常用的缓存可以分为四类: 1、pxory_cache:代理缓存,作为代理服务器时,缓存后端服务器响应内容等; 2、open_log_cache:日志缓存; 3、open_file_cache:文件缓存,作为WEB服务器时需要响应文件给客户端,这可以提高发生,相关指令前面《nginx详解》有介绍; 4、fastcgi_cache:后端php动态响应内容缓存,可能影响响应内容更新。 缓存数据分为两部分(键:数据): 1、存储键和缓存对象元数据,存放在共享内存中; 2、存储缓存数据,存放在磁盘空间中; ###4-3-1、代理缓存配置选项说明 我们这里只介绍代理缓存pxory_cache,这也是ngx_http_proxy_module模块提供的功能,这里配置选项较多,下面主要介绍有几个基本的选项:proxy_cache_path、proxy_cache和proxy_cache_valid。 ####1、proxy_cache_path proxy_cache_path定义一个完整的缓存空间,指定缓存数据的磁盘路径、键(元数据)存放的内存空间以及一些其他参数,如缓存删除策略。注意,该选项只能定义在http块上下文中。 如,proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m max_size=1G inactive=10; 缓存数据存储在/data/nginx/cache目录中; levels:配置在该目录下再分两层目录,一层1个随机字符作为名称,二层2个随机字符作为名称,levels最多三层,每层最多两个字符,这是为了加快访问文件的速度;最后使用代理url的哈希值作为关键字与文件名,一个缓存数据如下:/data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c; keys_zone:指定键(元数据)存放的内存空间,指定名称为one,这个名称后面proxy_cache需要引用;而10m就是内存空间的大小; max_size:指定最大缓存数据磁盘空间的大小; inactive:在inactive指定的时间内,未被访问的缓存数据将从缓存中删除。 ####2、proxy_cache proxy_cache用来引用上面proxy_cache_path定义的缓存空间,现时打开缓存功能,如下: proxy_cache one; #引用上面定义上的缓存空间,同一缓存空间可以在几个地方使用 ####3、proxy_cache_valid proxy_cache_valid设置不同响应代码的缓存时间,如: proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m; 对代码200和302的响应设置10分钟的缓存,对代码404的响应设置为1分钟。 ###4-3-2、配置代理缓存 先配置pxory_cache_path,再配置pxory_cache引用、打开缓存空间,接着配置两个proxy_cache_valid;为方便调试测试,我们可以通过add_header给请求响应增加一个头部信息,表示从服务器上返回的cache状态怎么样(有没有命中),主要配置如下: #定义一个完整的缓存空间; 缓存数据存储在/data/nginx/cache目录中/配置在该目录下再分两层目录/键(元数据)存放的>内存空间,名称为one(proxy_cache引用),10m内存空间大小/最大缓存数据磁盘空间的大小/10m未被访问的缓存数据将从缓存中删除 proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m max_size=1G inactive=10m; server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; add_header X-Cache "$upstream_cache_status form $server_addr"; #给请求响应增加一个头部信息,表示从服务器上返回的cache状态怎么样(有没有命中) location / { proxy_pass http://webserver; #引用上面定义的upstream负载均衡组 proxy_cache one; #引用上面定义上的缓存空间,同一缓存空间可以在几个地方使用 proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m; #对代码200和302的响应设置10分钟的缓存,对代码404的响应设置为1分钟: } …… 然后,创建缓存目录,重新加载,如下: [root@node2 ~]# mkdir -pv /data/nginx/cache [root@node2 ~]# service nginx reload ##反向代理-会话保持 两种方案: ###1. ip_hash upstream backend { ip_hash;#加在这里就可以 server backend1.example.com; server backend2.example.com; server backend3.example.com down; server backend4.example.com; } ip_hash简单易用,但有如下问题: 1. 当后端服务器宕机后,session会丢失; 2. 来自同一局域网的客户端会被转发到同一个后端服务器,可能导致负载失衡; 3. 不适用于CDN网络,不适用于前段还有代理的情况。 ###2. sticky_cookie_insert 使用sticky_cookie_insert启用会话亲缘关系,这会导致来自同一客户端的请求被传递到一组服务器在同一台服务器。与ip_hash不同之处在于,它不是基于IP来判断客户端的,而是基于cookie来判断。因此可以避免上述ip_hash中来自同一局域网的客户端和前段代理导致负载失衡的情况。 upstream backend { server backend1.example.com; server backend2.example.com; sticky_cookie_insert srv_id expires=1h domain=toxingwang.com path=/;#加在这里即可 } 说明: 1. expires:设置浏览器中保持cookie的时间。 2. domain:定义cookie的域 。 3. path:为cookie定义路径。 参考于:http://blog.csdn.net/gaoqiao1988/article/details/53390352 这里只是记录下方便以后使用
Pre:
OpenSSL创建自签名证书
Next:
Kafka部署
0
likes
37
Weibo
Wechat
Tencent Weibo
QQ Zone
RenRen
目录