# nginx.conf配置
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;
include extra/*.conf;
server {
listen 80;
server_name localhost;
charset koi8-r;
access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
# 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;
}
}
}
# extra/test.conf配置:
server {
listen 443 ssl;
server_name aa.bb.com;
# SSL开启
ssl_certificate ./conf/extra/ssl/ssl.crt/server.crt;
ssl_certificate_key ./conf/extra/ssl/ssl.key/server.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# route00开头的接口代理配置
location ^~ /route00 {
proxy_ignore_client_abort on;
proxy_send_timeout 15;
proxy_connect_timeout 15;
proxy_read_timeout 15;
proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 8 32k;
proxy_busy_buffers_size 64k;
proxy_next_upstream http_502 http_504 error timeout invalid_header;
proxy_pass https://aa.bb.com; #接口代理
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
break;
}
# 页面代理
location / {
proxy_ignore_client_abort on;
proxy_send_timeout 15;
proxy_connect_timeout 15;
proxy_read_timeout 15;
proxy_headers_hash_max_size 512;
proxy_headers_hash_bucket_size 128;
proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 8 32k;
proxy_busy_buffers_size 64k;
proxy_next_upstream http_502 http_504 error timeout invalid_header;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $http_x_real_ip;
proxy_set_header Connection "";
proxy_pass http://127.0.0.1:8082/;
}
}
server {
listen 80;
server_name aa.bb.com;
#强制到HTTPS
return 301 https://$host:443$request_uri;
}
# 直接aa.bb.com访问会代理到本地http://127.0.0.1:8082/
# 本地host配置127.0.0.1-->aa.bb.com
# 页面请求的是本地的js、css、html但是接口访问的是线上环境aa.bb.com对应的远程ip
以上配置是我在项目中的代理基本配置,回到正题
nginx是什么?
nginx负载均衡 upstream 配置
关于负载均衡的说法:
当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃。为了避免服务器崩溃,让用户有更好的体验,我们通过负载均衡的方式来分担服务器压力。
我们可以建立很多很多服务器,组成一个服务器集群,当用户访问网站时,先访问一个中间服务器,在让这个中间服务器在服务器集群中选择一个压力较小的服务器,然后将该访问请求引入该服务器。如此以来,用户的每次访问,都会保证服务器集群中的每个服务器压力趋于平衡,分担了服务器压力,避免了服务器崩溃的情况。
负载均衡是用反向代理的原理实现的。
# 常规配置
upstream backserver {
server 192.168.1.12:8080 weight=5 max_fails=2 fail_timeout=15s;
server 192.168.1.13:8080 weight=6 max_fails=2 fail_timeout=15s;
}
location / {
proxy_pass http://backserver;
break;
}
1、轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器
upstream backserver {
server 192.168.1.12:8080
server 192.168.1.13:8080
}
**2、weight权重:**指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况
upstream backserver {
server 192.168.1.12:8080 weight=10;
server 192.168.1.13:8080 weight=90;
}
3、ip_hash:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session不能跨服务器的问题。
upstream backserver {
ip_hash;
server 192.168.1.12:8080;
server 192.168.1.13:8080
}
4、least_conn:把请求转发给连接数较少的后端服务器
upstream backserver {
least_conn;
server 192.168.1.12:8080
server 192.168.1.13:8080
}
5、fair(第三方插件):第三方的负载均衡策略的实现需要安装第三方插件。这种方式根据后端服务器的响应时间进行分配,响应快的优先分配请求
upstream backserver {
server 192.168.1.12:8080
server 192.168.1.13:8080
fair; #实现响应时间短的优先分配
}
6、url hash(第三方插件):此种方式和ip_hash比较类似,根据url的hash值进行分配,将url分配到同一个后端服务器,当服务器存在缓存时比较有效
upstream backserver {
server 192.168.1.12:8080
server 192.168.1.13:8080
hash $request_uri; #实现每个url定向到同一个后端服务器
hash_method crc32; #hash_method是使用的hash算法
}