反向代理¶
反向代理服务器配置nginx.conf #配置域名为test.web1.test的虚拟主机 server{ listen 80; server_name test.web1.test; #域名test.web1.test的请求全部转发到Web服务器192.168.1.101 location / { proxy_pass http://192.168.1.101; } } #配置域名为test.web2.test的虚拟主机 server{ listen 80; server_name test.web2.test; #域名test.we2.test的请求全部转发到Web服务器192.168.1.102 location / { proxy_pass http://192.168.1.102; } } 实验客户端配置,hosts文件,...103为nginx反向代理服务器地址 192.168.1.103 test.web1.test 192.168.1.103 test.web2.test
反向代理其他指令 proxy_set_header 在将客户端请求发送给后端服务器之前,更改来自客户端的请求头信息 proxy_connect_timeout 配置与后端服务器尝试建立连接的超时时间 proxy_read_ timeout 配置向后端服务器组发出read请求后,等待响应的超时时间 proxy send_timeout 配置向后端服务器组发出write请求后,等待响应的超时时间 proxy_redirect 用于修改后端服务器返回的响应头中的Location和Refresh 如 location / { proxy_pass http://192.168.78.200; proxy_set_header Host $host; proxy_set header X-Real-IP $remote addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
负载均衡¶
负载均衡配置方式 1轮询方式:按时间顺序 2权重方式:用于后端服务器性能不均的情况 3ip_hash方式:每个访客固定访问一个后端服务器,解决session共享问题 4第三方模块方式:fair模块按服务器响应时间分配;url_hash模块
一般轮询负载均衡 代理服务器配置nginx.conf
配置域名为test.web.test的虚拟主机¶
server { listen 80; server_name test.web.test; location / { proxy_pass http://web_server; } }
配置负载均衡服务器组,服务器宕掉不影响自动跳过¶
upstream web_server { server 192.168.1.101; server 192.168.1.102; }
加权轮询负载均衡 代理服务器配置nginx.conf
配置域名为test.web.test的虚拟主机¶
server { listen 80; server_name test.web.test; location / { proxy_pass http://web_server; } }
配置负载均衡服务器组,按照分散算法分配概率¶
upstream web_server { server 192.168.1.101 weight=1; server 192.168.1.102 weight=3; } 可以添加的状态参数以空格分割 weight=1:权重 max_fails=1 允许请求失败次数,默认为1 fail_timeout=超过max_fail后暂停服务时间 backup 预留备份机器,所有其他都故障或忙碌时启用 down 暂时不参与负载均衡
ip_hash负载均衡
配置域名为test.web.test的虚拟主机¶
server { listen 80; server_name test.web.test; location / { proxy_pass http://web_server; } }
配置负载均衡服务器组,按照分散算法分配概率¶
upstream web_server { ip_hash; server 192.168.1.101; server 192.168.1.102; server 192.168.1.103 dwn; } 此配置下不可用weigit和backup参数。ip_hash容易形成某服务器请求过多另一服务器请求过少的情况。
利用第三方模块,fair $ cp -r /usr/local/nginx usr/local/nginx_bak # 备份原nginx $ cd /usr/local/src/ $ curl -O https://codeload.github.com/gnosek/nginx-upstream-fair/zip/master $ unzip mster # unzip指令需要yum安装 $ mv nginx-upstream-fair-master nginx-upstream-fair # 解压改名即可 $ cd /usr/local/src/nginx-1.15.8 $ /usr/local/nginx/nginx -V 查看当前./confgure选项复制内容加上要加入的模块 $ ./configure --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.42 --with-zlib=/usr/local/src/zlib-1.2.11 --with-openssl=/usr/local/src/openssl-1.1.1a --add-module=/usr/local/src/nginx-upstream-fair $ make # 不要install,会覆盖原安装文件 $ /usr/local/nginx/nginx -s stop $ cp objs/nginx /usr/local/nginx/objs/nginx # 复制生成的nginx文件 $ /usr/local/nginx/nginx 注意:nginx1.14.0以上修改源码文件ngx_http_upstream_fair_module.c 543-if (us->port == 0 && us->default_port == 0) { 543+if (us->port == 0) { 553-u.port = (in_port_t) (us->port ? us->port : us->default_port); 553u.port = us->port; 配置fair方式的负载均衡,nginx.conf
配置域名为test.web.test的虚拟主机¶
server { listen 80; server_name test.web.test; location / { proxy_pass http://web_server; } }
配置fair方式的负载均衡¶
upstream web_server { server 192.168.1.101; server 192.168.1.102; fair; }
缓存配置¶
永久缓存配置 Web缓存服务器配置,nginx.conf server { listen 80; server_name 192.168.1.100; location / { root cache; # 指定缓存文件保存目录cache/,手动创建赋权 proxy_store on; # 开启本地缓存 proxy_store_access user:rw group:rw all:r; # 设置读写规则 proxy_temp_path cache_tmp; # 临时缓存目录,自动创建 # 先判断缓存文件是否存在,若不存在则向后端服务器获取 if(!-e $request_filename){ proxy_pass http://192.168.1.101; } } }
临时缓存配置 Web缓存服务器配置,nginx.conf http {...
代理临时目录¶
proxy_temp_path /user/local/nginx/proxy_temp_dir
web缓存目录和参数配置¶
proxy_cache_path /usr/local/nginx/proxy_cache_dir levels=1:2 keys_zone=cache_one:50m inactive=1m max_size=500m
levels1:2 根据请求链接地址的hash值创建目录,如hash=af7098al5e4 大专栏 负载均衡与缓存30326197ee01516fdace0则第一层子目录名称长度为1字符0,第二层子目录名称长度为2字符ce。 key_zone=50m 缓存区名称及大小 inactive=1m 清除未在指定时间内被访问的缓存,1m=1分钟,1h,1d max_size 磁盘空间大小500m,10g server { listen 80; server_name test.web.test; # 增加两个响应头信息,用于获知访问的服务器地址与缓存是否成功 add_header X-Via server_addr; # X-Via服务器地址 add_header X-Cache upstream_cache_status; # X-Cache资源缓存状态 location / { proxy_cache cache_one # 设置缓存区名称 proyx_cache_key hosturiuriuriuriis_argsis_argsuriuriuriuriis_argsis_argsargs # 以此组合Key值计算hash proxy_cache_valid 200 10m; # 状态码200缓存10分钟 proxy_cache_valid 304 1m; # 304缓存1分钟 proxy_cache_valid 301 302 1h; # 301 302缓存1小时 proxy_cache_valid any 1m; # 其他状态缓存1分钟 # 设置反向代理 proxy_pass http://192.168.1.101; } } 其中 $upstream_cache_status资源缓存状态 HIT缓存命中 MISS未命中,请求被传到后端 EXPIRED缓存已经过期,请求被传到后端 UPDATING正在更新缓存,将使用旧的应答 STALE无法从后端更新缓存,使用旧的缓存内容,通过proxy_cache_use_stale BYPASS缓存被绕过,通过proxy_cache_bypass REVALIDATED通过If-Modified-Since请求验证缓存是否过期,通过proxy_cache_revalidate $host:如test.web.test $uri:如index.html $is_args:?或空 $args:如a=1&b=2 常用缓存配置指令 proxy_cache_bypass不从缓存获取数据的条件 proxy_cache_lock是否开启缓存锁 proxy_cache_lock_timeout缓存锁超时时间 proxy_on_cache不使用缓存功能的条件 proxy_cache_min_uses超过一定请求数的URL才进行缓存 proxy_cache_revalidate通过If-Modified-Since请求验证缓存是否过期 proxy_cache_use_stale使用旧的缓存内容
缓存清理配置,利用第三方模块ngx_cache_purge $ cp -r /usr/local/nginx usr/local/nginx_bak2 # 备份原nginx $ cd /usr/local/src/ $ curl -O http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz $ tar -zxvf ngx_cache_purge-2.3.tar.gz $ mv ngx_cache_purge-2.3 ngx_cache_purge # 解压改名即可 $ cd /usr/local/src/nginx-1.15.8 $ /usr/local/nginx/nginx -V 查看当前./confgure选项复制内容加上要加入的模块 $ ./configure --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.42 --with-zlib=/usr/local/src/zlib-1.2.11 --with-openssl=/usr/local/src/openssl-1.1.1a --add-module=/usr/local/src/nginx-upstream-fair --add-module=/usr/local/src/ngx_cache_purge $ make # 不要install,会覆盖原安装文件 $ /usr/local/nginx/nginx -s stop $ cp objs/nginx /usr/local/nginx/objs/nginx # 复制生成的nginx文件 $ /usr/local/nginx/nginx 配置缓存清理功能 Web缓存服务器配置,nginx.conf server{... location ~ /purge(/.*) { allow 192.168.1.100; # 指定ip使用该命令 deny all; proxy_cache_purge cache_one host1is_argsargs } 其中 proxy_cache 缓存区名称cache_one,...Key值组成1相当于$uri
邮件服务¶
mail模块包含以下模块 ngx_mail_core_module Nginx邮件服务的核心功能 ngx_mail_auth_http_module 用于用户认证 ngx_mail_proxy_module 用与邮件代理 ngx_mail_smtp_module 用于SMTP邮件传输协议的相关设置 ngx_mail_pop3_module 用于POP邮件传输协议的相关设置 ngx_mail_imap_module 用于IMAP邮件传输协议的相关设置 ngx_mail_ssl_module 支持基于SSL/TLS协议功能,要求OpenSSL库的支持 重新编译要增加的指令 $ ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-mail --with-mail_ssl_module $ make # 要是增加功能不要install Nginx邮件代理服务器配置nginx.conf mail { # 邮件认证服务器的访问url auth_http 192.168.1.101:8009/auth.php; #每个请求所使用的内存缓冲区大小 proxy_buffer 4k; #添加对POP3的支持 server { listen 110; protocol pop3; proxy on; } #添加对IMAP的支持 server { listen 143; protocol IMAP; #设置接收初始客户端请求缓冲区大小 imap_client_buffer 4k; proxy on; } #添加对SMTP的支持 server { listen 25; protocol smtp; #设置接收初始客户端请求缓冲区大小 smtp_client_buffer 4k; xclient off; } } 邮件服务配置指令 listen 邮件服务器监听的IP地址和端口 server_name 为每个server块构成的虚拟主机配置的域名 protocol 当前虚拟主机支持的协议 so_keepalive 后端代理服务器是否启用TCP keepalive模式来处理 Nginx邮件服务器转发的客户端连接 pop3_auth 用于配置POP3认证用户的方式 pop3_capabilities 用于配置POP3协议的扩展功能 imap_auth 用于配置IMAP认证用户的方式 imap_capabilities 用于配置IMAP协议的扩展功能 imap_client_buffer 用于配置IMAP协议数据缓存的大小 smtp_auth 用于配置SMTP认证用户的方式 smtp_capabilities 用于配置SMTP协议的扩展功能 auth_http_header Nginx服务器向HTTP认证服务器发起的认证请求时,添加指定的请求头 auth_http_timeout 配置Nginx服务器向HTTP认证服务器发起认证请求后,等待响应的超时时间 proxy_pass_error_message 用来配置是否将后端服务器上邮件服务认证过程中产生的错误信息发送给客户端 proxy_ timeout 设置客户端与代理服务器之间的超时时间 xclient 可以开启或者关闭命令XCLIENT的SMTP后端连接,使得后端可以强制通过 IP、HELO或LOGIN限定客户端