原创文章,转载注明出处
nginx作为一款优秀的反向代理软件,以其好用,易于搭建负载均衡的网站集群而著称,这里分别记录一下工作中用到nginx作为负载以及多站点发布的时候一些配置和注意事项
一 nginx在linux下使用配置,对于多站点以及负载 这里建议最好的方式是使用 sites-enabled 的方式,把配置文件分开来配置,清晰明了。
下面来看一下整个的文件结构:
1。看一下关于nginx.conf的配置
user www-data; worker_processes 8; # worker_cpu_affinity 0001 0010 0100 1000; worker_rlimit_nofile 10240; pid /run/nginx.pid; events { use epoll; worker_connections 51200; # multi_accept on; } http { ## # Basic Settings ## sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; server_tokens off; server_names_hash_bucket_size 512; # server_name_in_redirect off; include /etc/nginx/mime.types; # 注意这里需要注意的,特别涉及到上传不成功的时候,需要检查这里 default_type application/octet-stream; client_max_body_size 5m; ## # SSL Settings ## #ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE #ssl_prefer_server_ciphers on; ## # Logging Settings ## log_format main 'realip:$http_x_forwarded_for slbip:$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"' '"$upstream_addr" "$upstream_status" "$upstream_response_time"'; access_log /home/nginx_logs/access.log main; error_log /home/nginx_logs/error.log; ## # Gzip Settings ## #gzip on; #gzip_disable "msie6"; #gzip_vary on; #gzip_proxied any; #gzip_comp_level 6; #gzip_buffers 16 8k; #gzip_http_version 1.1; #gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; gzip on; gzip_min_length 1000; gzip_buffers 4 8k; gzip_types text/* text/css application/javascript. application/x-javascript; gzip_comp_level 9; gzip_proxied any; gzip_vary on; gzip_http_version 1.0; output_buffers 4 32k; postpone_output 1460; client_header_buffer_size 128k; large_client_header_buffers 4 256k; client_header_timeout 1m; client_body_timeout 1m; send_timeout 1m; limit_conn_zone $binary_remote_addr zone=addr:10m; ###start#### #add_header Access-Control-Allow-Origin *; #add_header Access-Control-Allow-Headers X-Requested-With; #add_header Access-Control-Allow-Methods GET,POST,OPTIONS; ###end ### ## # Virtual Host Configs 注意,这里就是开启配置文件包含,我们为多站点分开配置 ## include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }
2。看一看包含文件的配置:
在conf.d中配置 反向代理的真实服务器的地址
如果有多台,这里直接多配置几台就可以,即可实现负载均衡
upstream maple-api { server localhost:6000 max_fails=2 fail_timeout=15s;
server localhost:6001 max_fails=2 fail_timeout=15s;
server localhost:6002 max_fails=2 fail_timeout=15s;
}
这里可以用DOCKER的方式,模拟多台服务器的负载均衡,看看是否nginx能真实起效果
3。关于server的配置,来看看配置
配置文件详细:
server { listen 80; #listen 8080; server_name mapleadmin.srfish.com; #注意这里的域名,就是拿来区别,多站点反向代理的 #index index.html index.htm; #配置日志 access_log /home/nginx_logs/maple-admin/maple-admin.cn_access.log main; #注意这边的日志,如果不存的话,你估计得手工创建一个 error_log /home/nginx_logs/maple-admin/maple-admin.cn_error.log; #ssl on; #这里的SSL配置,如果启用了证书,可以加一个证书的 #ssl_certificate /etc/nginx/sslkey/vpclub.pem; #ssl_certificate_key /etc/nginx/sslkey/vpclub.key; #ssl_session_timeout 5m; #ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #ssl_ciphers AESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL; #ssl_prefer_server_ciphers on; #对 "/" 启用负载均衡 location / { proxy_redirect off; proxy_set_header Host $host; #proxy_set_header X-Real-IP $remote_addr; 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 1024k; #跟后端服务器连接超时时间 发起握手等候响应超时时间 proxy_connect_timeout 40; #连接成功后 等待后端服务器响应时间 其实已进入后端的排队之中等候处理 proxy_read_timeout 90; #代理请求缓存区 这个缓存区间会保存用户的头信息一共Nginx进行规则处理 一般只要能保存下头信息即可 proxy_send_timeout 90; #同上 告诉Nginx保存单个用的几个Buffer最大用多大空间 proxy_buffer_size 1024k; proxy_buffers 32 1024k; #如果系统很忙的时候可以申请国内各大的proxy_buffers 官方推荐 *2 proxy_busy_buffers_size 2048k; #proxy 缓存临时文件的大小 proxy_temp_file_write_size 2048k; proxy_next_upstream error timeout invalid_header http_500 http_503 http_404; proxy_max_temp_file_size 128m; #以这种格式来使用后端的web服务器 proxy_pass http://maple-admin; #注意这边的写法,这个 名字,一定要同 oonf.d/*中的配置文件对应,不能乱写,不然代理不到正确的网址去 #index index.html index.htm index.jsp; } #location /status #开启NGIN的状态支持,可以写一个脚本,了解NGINX当前的流量以及活动SESSION #{ # stub_status on; # access_log off; #} }
二 nginx在WINDOWS下面的配置,WINDOWS在配置的时候,我也尝试过配置site-enables,但是没有成功,如果有成功的大佬,希望大佬赐教,这里是直接配置在nginx.conf里面的
整个配置文件
#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; error_log logs/error.log; sendfile on; #tcp_nopush on; #gzip on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; server_tokens off; server_names_hash_bucket_size 512; gzip on; gzip_min_length 1000; gzip_buffers 4 8k; gzip_types text/* text/css application/javascript. application/x-javascript; gzip_comp_level 9; gzip_proxied any; gzip_vary on; gzip_http_version 1.0; output_buffers 4 32k; postpone_output 1460; client_header_buffer_size 128k; large_client_header_buffers 4 256k; client_header_timeout 1m; client_body_timeout 1m; send_timeout 1m; limit_conn_zone $binary_remote_addr zone=addr:10m; ## # Virtual Host Configs ## #include conf.d/*.conf; #include sites-enabled/*; # another virtual host using mix of IP-, name-, and port-based configuration # server { listen 80; server_name www.site.info; #配置日志 access_log logs/site_logs/site.cn_access.log main; error_log logs/site_logs/site.cn_error.log; #对 "/" 启用负载均衡 location / { proxy_redirect off; proxy_set_header Host $host; #proxy_set_header X-Real-IP $remote_addr; 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 1024k; #跟后端服务器连接超时时间 发起握手等候响应超时时间 proxy_connect_timeout 40; #连接成功后 等待后端服务器响应时间 其实已进入后端的排队之中等候处理 proxy_read_timeout 90; #代理请求缓存区 这个缓存区间会保存用户的头信息一共Nginx进行规则处理 一般只要能保存下头信息即可 proxy_send_timeout 90; #同上 告诉Nginx保存单个用的几个Buffer最大用多大空间 proxy_buffer_size 1024k; proxy_buffers 32 1024k; #如果系统很忙的时候可以申请国内各大的proxy_buffers 官方推荐 *2 proxy_busy_buffers_size 2048k; #proxy 缓存临时文件的大小 proxy_temp_file_write_size 2048k; proxy_next_upstream error timeout invalid_header http_500 http_503 http_404; proxy_max_temp_file_size 128m; #以这种格式来使用后端的web服务器 proxy_pass http://jjdata-site; #index index.html index.htm index.jsp; } } upstream jjdata-site { server localhost:8011 max_fails=2 fail_timeout=15s; #server localhost:7001 max_fails=2 fail_timeout=15s; } server { listen 80; server_name admin.site.info; #配置日志 access_log logs/admin_logs/admin.cn_access.log main; error_log logs/admin_logs/admin.cn_error.log; #对 "/" 启用负载均衡 location / { proxy_redirect off; proxy_set_header Host $host; #proxy_set_header X-Real-IP $remote_addr; 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 1024k; #跟后端服务器连接超时时间 发起握手等候响应超时时间 proxy_connect_timeout 40; #连接成功后 等待后端服务器响应时间 其实已进入后端的排队之中等候处理 proxy_read_timeout 90; #代理请求缓存区 这个缓存区间会保存用户的头信息一共Nginx进行规则处理 一般只要能保存下头信息即可 proxy_send_timeout 90; #同上 告诉Nginx保存单个用的几个Buffer最大用多大空间 proxy_buffer_size 1024k; proxy_buffers 32 1024k; #如果系统很忙的时候可以申请国内各大的proxy_buffers 官方推荐 *2 proxy_busy_buffers_size 2048k; #proxy 缓存临时文件的大小 proxy_temp_file_write_size 2048k; proxy_next_upstream error timeout invalid_header http_500 http_503 http_404; proxy_max_temp_file_size 128m; #以这种格式来使用后端的web服务器 proxy_pass http://jjdata-admin; #index index.html index.htm index.jsp; } } upstream jjdata-admin { server localhost:8010 max_fails=2 fail_timeout=15s; #server localhost:7001 max_fails=2 fail_timeout=15s; } }
其实是跟linux环境下是一样的,只是放在一个文件里面
三 测试一把负载均衡
访问同一个文件的时候,会不定时的切换负载,说明配置成功,这负载均衡的配置真是简单到让人难以想像,强大。
四 再来个zabbix,我们搞一个流量监控吧
是的,装逼就要装到家,一定要帅才行,好了,布置和监控完毕