nginx 负载均衡及反向代理

Nginx简介

Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师开发,官方测试nginx能够支支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定。由于Nginx 超越 Apache 的高性能和稳定性,使得国内使用 Nginx 作为 Web 服务器的网站也越来越多,其中包括新浪、网易、腾讯、搜狐等企业的一些门户网站等,在3w以上的高并发环境下,ngnix处理能力相当于apache的10倍。

Nginx负载均衡

分摊到多个操作单元上进行执行,保证所有后端服务器都将性能充分发挥,从而保持服务器集群的整体性能最优。

一、下载ngxin

下载地址 http://nginx.org/download/nginx-1.2.5.zip

解压后 双击nginx.exe 启动

查看进程出现 nginx.exe

浏览器输入http://localhost/

出现如下字样:

Welcome to nginx!

nginx启动成功

配置完环境变量后,就可以使用以下命令来启动和关闭Nginx服务。

1)start nginx 启动命令

2)nginx -s stop 快速停止nginx,并不保存相关信息.

3)nginx -s quit 完整有序的停止nginx,并保存相关信息。

4)nginx -t 测试

二、在三台服务器上分别建一个网站:

Server1 : 192.168.10.152:8887

Server2: 192.168.10.63:8887

Server3 : 192.168.10.134:8887

每个网站下放一个Index.html文件,内容为相应ip+端口

三、修改配置文件conf

找到 \conf\nginx.conf

打卡nginx.conf

配置如下

#user  nobody;
#nginx进程数,建议设置为等于CPU总核心数
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 8192;
} rtmp {
server {
listen 1935;
chunk_size 4000; application myapp {
live on;
} application zbcs {
live on;
record off;
} application vod {
play video;
} application hls {
live on;
hls on;
hls_path temp/hls;
hls_fragment 8s;
}
}
} #设定http服务器,利用他的反向代理功能提供负载均衡支持
http {
#设定mime类型
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;
log_format main '$remote_addr - $remote_user [$time_local]'
'"$request" $status $bytes_sent'
'"$http_referer" "$http_user_agent" "$http_x_forwarded_for"'
'"$gzip_ratio"';
log_format download '$remote_addr - $remote_user [$time_local]'
'"$request" $status $bytes_sent'
'"$http_referer" "$http_user_agent"'
'"$http_range" "$sent_http_content_range"'; #设定请求缓冲
client_header_buffer_size 1k;
large_client_header_buffers 4 4k; #设定access log
access_log logs/access.log main;
client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m; sendfile on;
tcp_nopush on;
tcp_nodelay on; #keepalive_timeout 0;
keepalive_timeout 65; #开启gzip模块
gzip on;
gzip_min_length 1100;
gzip_buffers 4 8k;
gzip_types text/plain application/x-javascript text/css application/xml; output_buffers 1 32k;
postpone_output 1460; server_names_hash_bucket_size 128;
client_max_body_size 8m; fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_vary on; #服务器集群名称 localhost
upstream localhost{
#根据ip计算将请求分配各那个后端tomcat,可以解决session问题,保持一个客户端多次请求分发到一台后端服务器上
ip_hash;
#weight权重,max_fails请求失败的次数 fail_timeout请求失败后暂停请求此服务器的时间
server 192.168.10.63:8887 weight=3 max_fails=1 fail_timeout=600s;
server 192.168.10.134:8887 weight=3 max_fails=1 fail_timeout=600s;
server 192.168.10.152:8887 weight=3 max_fails=1 fail_timeout=600s;
} server {
#监听端口
listen 8090;
server_name localhost; #charset koi8-r;
charset 'utf-8'; #access_log logs/host.access.log main; #对 "/" 启用负载均衡
location / {

        # 项目根目录
        root html;
        # 默认首页
        index index.html index.htm;

            #反向代理
proxy_pass http://localhost;
#设置主机头和客户端真实地址,以便服务器获取客户端真实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;
#跟后端服务器连接超时时间 发起握手等候响应超时时间
proxy_connect_timeout 2s;
#连接成功后 等待后端服务器响应时间 其实已进入后端的排队之中等候处理
proxy_read_timeout 90;
#后端服务器数据回传时间 就是在规定时间内后端服务器必须传完所有数据
proxy_send_timeout 90;
#代理请求缓存区 这个缓存区间会保存用户的头信息一共Nginx进行规则处理 一般只要能保存下头信息即可
proxy_buffer_size 4k;
#同上 告诉Nginx保存单个用的几个Buffer最大用多大空间
proxy_buffers 4 32k;
#如果系统很忙的时候可以申请国内各大的proxy_buffers 官方推荐 *2
proxy_busy_buffers_size 64k;
#proxy 缓存临时文件的大小
proxy_temp_file_write_size 64k;
proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
proxy_max_temp_file_size 128m; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
} # proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#} # deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
} # another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias; # location / {
# root html;
# index index.html index.htm;
# }
#} # HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost; # ssl_certificate cert.pem;
# ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on; # location / {
# root html;
# index index.html index.htm;
# }
#} }

四、重启nginx

nginx -s quit 停止nginx

start nginx  启动nginx

五、发起请求

打开浏览器,访问http://localhost:8090

快速刷新页面,轮询出现三个服务器ip+端口

如果停止其中一台服务,再次快速刷新页面,不会出现停止服务的ip+端口

成功!

反向代理

其实上面已经出现了反向代理的配置及备注信息

如要访问http://192.168.10.134:8090/test/Index.html

第一种

编辑\conf\nginx.conf 里的server 段

location /test/ {
proxy_pass http://192.168.10.134:8887;
}

当访问http://localhost:8090/test/ 时nginx 会代理访问到 http://192.168.10.134:8887/test/Index.html

第二种

location /test/ {
proxy_pass http://192.168.10.134:8887/;
}

当访问http://localhost:8090/test/ 时nginx 会代理就会访问到 http://192.168.10.134:8887/Index.html

第三种

location /test/ {
proxy_pass http://192.168.10.134:8887/file/;
}

当访问http://localhost:8090/test/ 时nginx 会代理就会访问到 http://192.168.10.134:8887/file/Index.html

第四种

location /test/ {
proxy_pass http://192.168.10.134:8887/file;
}

当访问http://localhost:8090/test/ 时nginx 会代理就会访问到 http://192.168.10.134:8887/fileIndex.html

上一篇:CentOS中实现Nginx负载均衡和反向代理


下一篇:Nginx负载均衡与反向代理—《亿级流量网站架构核心技术》