说明:nginx介绍这里就不在废话了,这里主要说下nginx的反向代理和负载均衡的配置,如果不想看详细介绍,直接跳转到第三步3.2反向代理配置,3.3负载均衡和反向代理配置
1.第一步,当然是下载啦
下载地址:http://nginx.org/en/download.html
下载稳定版即可。
2.安装
下载好以后直接解压即可完成安装(切记不要安装到中文目录下)
3.配置
nginx配置文件在config下的nginx.conf
3.1配置介绍:
1)、全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
2)、events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
3)、http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
4)、server块:配置虚拟主机的相关参数,一个http中可以有多个server。
5)、location块:配置请求的路由,以及各种页面的处理情况。
详细配置介绍如下:
########### 每个指令必须有分号结束。#################
user nobody; #配置用户或者组,默认为nobody nobody
worker_processes 1; #启动进程,通常设置成和cpu的数量相等,默认是1
#全局错误日志及PID文件
error_log log/error.log debug; #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
pid logs/nginx.pid; #指定nginx进程运行文件存放地址
events {
accept_mutex on; #设置网路连接序列化,防止惊群现象发生,默认为on
multi_accept on; #设置一个进程是否同时接受多个网络连接,默认为off
use epoll; #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
worker_connections 1024; #单个后台worker process进程的最大并发链接数
# 并发总数是 worker_processes 和 worker_connections 的乘积
# 即 max_clients = worker_processes * worker_connections
# 在设置了反向代理的情况下,max_clients = worker_processes * worker_connections / 4
# 为什么上面反向代理要除以4,应该说是一个经验值
# 根据以上条件,正常情况下的Nginx Server可以应付的最大连接数为:4 * 8000 = 32000
# worker_connections 值的设置跟物理内存大小有关
# 因为并发受IO约束,max_clients的值须小于系统可以打开的最大文件数
# 而系统可以打开的最大文件数和内存大小成正比,一般1GB内存的机器上可以打开的文件数大约是10万左右
# 360M内存的VPS可以打开的文件句柄数是 34336
# 32000 < 34336,即并发连接总数小于系统可以打开的文件句柄总数,这样就在操作系统可以承受的范围之内
# 所以,worker_connections 的值需根据 worker_processes 进程数目和系统可以打开的最大文件总数进行适当地进行设置
# 使得并发总数小于操作系统可以打开的最大文件数目
# 其实质也就是根据主机的物理CPU和内存进行配置
# 当然,理论上的并发总数可能会和实际有所偏差,因为主机还有其他的工作进程需要消耗系统资源。
}
http {
include mime.types; #文件扩展名与文件类型映射表
default_type application/octet-stream; #默认文件类型,默认为text/plain
#access_log off; #取消服务日志
log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格式
#1.$remote_addr 与$http_x_forwarded_for 用以记录客户端的ip地址
#2.$remote_user:用来记录客户端用户名称
#3.$time_local :用来记录访问时间与时区
#4.$request :用来记录请求的url与http协议;
#5.$status :用来记录请求状态;成功是200
#6.$body_bytes_s ent :记录发送给客户端文件主体内容大小
#7.$http_referer :用来记录从那个页面链接访问过来的
#8.$http_user_agent :记录客户端浏览器的相关信息
access_log log/access.log myFormat; #combined为日志格式的默认值
sendfile on; #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
#sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,
#对于普通应用,必须设为 on,
#如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,
#以平衡磁盘与网络I/O处理速度,降低系统的uptime.
sendfile_max_chunk 100k; #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
keepalive_timeout 65; #连接超时时间,默认为75s,可以在http,server,location块。
#设定请求缓冲
client_header_buffer_size 128k;
large_client_header_buffers 4 128k;
proxy_next_upstream timeout; #反向代理upstream中设置的服务器组,出现故障时,被代理服务器返回的状态值error|timeout|invalid_header|http_500|http_502|http_503|http_504|http_404|off
#error:建立连接或向被代理的服务器发送请求或读取响应信息时服务器发生错误
#timeout:建立连接,想被代理服务器发送请求或读取响应信息时服务器发生超时
#invalid_header:被代理服务器返回的响应头异常
#off:无法将请求分发给被代理的服务器
#http_400,....:被代理服务器返回的状态码为400,500,502,等
# upstream 用作配置负载均衡时请求的主机服务器
#1.热备配置
upstream mysvr {
#关于nginx负载均衡配置的几个状态参数讲解
#down,表示当前的server暂时不参与负载均衡
#backup,预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻
#max_fails,允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误
#fail_timeout,在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用
server 127.0.0.1:7878;
server 127.0.0.1:7879 backup;
}
#2.默认轮询:nginx默认就是轮询其权重都默认为1
upstream mysvr {
server 127.0.0.1:7878;
server 127.0.0.1:7879;
}
#3.加权轮询:跟据配置的权重的大小而分发给不同服务器不同数量的请求
upstream mysvr {
server 127.0.0.1:7878 weight=1 max_fails=2 fail_timeout=2;
server 127.0.0.1:7879 weight=2 max_fails=2 fail_timeout=2;
}
#4ip_hash:nginx会让相同的客户端ip请求相同的服务器
upstream mysvr {
ip_hash;
server 127.0.0.1:7878;
server 127.0.0.1:7879;
}
error_page 404 https://www.baidu.com; #错误页
proxy_intercept_errors on; #如果被代理服务器返回的状态码为400或者大于400,设置的error_page配置起作用,默认为off,还有配置为on error_page错误也才起作用
server {
keepalive_requests 120; #单连接请求上限次数。
listen 4545; #监听端口
server_name 127.0.0.1; #监听地址,这里可以使ip也可以是域名
location ~*^.+$ { #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
#root path; #根目录
#index vv.txt; #设置默认页
proxy_pass 127.0.0.1:8080;请求的服务器地址
deny 127.0.0.1; #拒绝的ip
allow 172.18.5.54; #允许的ip
proxy_set_header X_Real_IP $remote_addr;#把源IP [$remote_addr,建立HTTP连接header里面的信息]赋值给X-Real-IP;这样在代码中 $X-Real-IP来获取 源IP
proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;#在nginx 作为代理服务器时,设置的IP列表,会把经过的机器ip,代理机器ip都记录下来,用","隔开;代码中用 echo $x-forwarded-for |awk -F, '{print $1}' 来作为源IP
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_connect_timeout 300;#nginx服务器与被代理的服务器建立连接的超时时间,默认60秒
proxy_send_timeout 300;#nginx服务器想被代理服务器组发出write请求后,等待响应的超时间,默认为60秒。
proxy_read_timeout 600;#nginx服务器想被代理服务器组发出read请求后,等待响应的超时间,默认为60秒。
proxy_ignore_client_abort on; #客户端断网时,nginx服务器是否中断对被代理服务器的请求。默认为off。
proxy_buffer_size 256k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
proxy_max_temp_file_size 128m;
sendfile_max_chunk 100k; #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限
}
}
}
3.2只配置反向代理:
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 9080;
server_name 192.168.3.24;
#charset koi8-r;
#access_log logs/host.access.log main;
location ~ /aaa/ {#aaa为wtomcat服务器下的项目名称,~区分大小写
proxy_pass http://localhost:7080;
#如果是在本地搭建一下配置文件不加也可以请求到,如果在远程服务器上,可能会出现页面css文件和js文件加载路径出现错误,所以在远程服务器搭建添加如下配置
proxy_set_header X_Real_IP $remote_addr;
proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 600;
proxy_buffer_size 256k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
proxy_max_temp_file_size 128m;
}
location ~ /bbb/ {
proxy_pass http://localhost:8080;
proxy_set_header X_Real_IP $remote_addr;
proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 600;
proxy_buffer_size 256k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
proxy_max_temp_file_size 128m;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
3.3配置反向代理和负载均衡:
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
upstream Serverone{
server 192.168.3.24:8081 weight=3;访问三次8081然后访问一次8082
server 192.168.3.24:8082 weight=1;
}
server {
listen 9080;
server_name 192.168.3.24;
#charset koi8-r;
#access_log logs/host.access.log main;
location ~ /JscDzbh/ {
proxy_pass http://Serverone;#配置负载均衡,访问upstream配置名称为Serverone的服务
proxy_set_header X_Real_IP $remote_addr;
proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 600;
proxy_buffer_size 256k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
proxy_max_temp_file_size 128m;
}
location ~ /jrfwpt_wancheng/ {
proxy_pass http://localhost:8080;
proxy_set_header X_Real_IP $remote_addr;
proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 600;
proxy_buffer_size 256k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
proxy_max_temp_file_size 128m;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
注意:如果在远程服务器上配置了端口访问不到,一定要去购买服务器的管理页面开放端口才能访问到
到此nginx在windows上的配置就结束了,在linux上配置大同小异,可借鉴,废话不多少,赶紧去试试吧