nginx(四、配置反向代理、负载均衡、https)

/etc/nginx/nginx.conf

user  root;

#设置成cpu核数
worker_processes  4;

#日志级别设置为error
error_log  /var/log/nginx/error.log error;
pid        /var/run/nginx.pid;

#填写linux的最大文件句柄数
worker_rlimit_nofile 1048576;

events {
    worker_connections  40000;
    multi_accept on;
    
    #off 每次有新连接则激活所有worker,适用大访问量
    #on  每次有新连接则激活1个worker,是系统默认配置
    accept_mutex off;
    use epoll;
}


http {
    include       /etc/nginx/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 off
    access_log  /var/log/nginx/access.log  main;
    
    
    #on  对于普通应用,零拷贝输出文件提升效率
    #off 对于下载等磁盘IO重负载应用,以平衡磁盘与网络I/O处理速度,降低系统的uptime.
    sendfile        on;
    
    #tcp_nopush 和 tcp_nodelay是互斥的,只用指定1个即可且仅在sendfile为on时生效。
    #nopush  存入缓存等数据达到一定数量后发送,节约数据包和流量
    #nodelay 就算只有1个字节也立即发送,可能会阻塞网络,但提高响应速度
    #tcp_nopush     on;
    #tcp_nodelay    off;
    
    keepalive_timeout  65;

    #limit模块,可防范一定量的DDOS攻击
    #存储session状态,为session分配一个名为one的10M的内存存储区,限制每秒只接受1个ip的20次请求 20r/s
    limit_req_zone $binary_remote_addr zone=one:10m rate=20r/s;
    limit_conn_zone $binary_remote_addr zone=addr:10m;

    include /etc/nginx/conf.d/*.conf;
}

/etc/nginx/conf.d/myconfig.conf

#压缩数据流,有gzip_static_module模块可以预压缩,主要针对静态资源,有需求可以去了解一下
gzip        on;
#压缩大于1K的数据
gzip_min_length     1k;
gzip_buffers        16 64k;
#末端通信HTTP/1.0,默认1.1
#gzip_http_version      1.0;
#压缩级别1-10数字越大压缩的越好时间越长
gzip_comp_level     3;
#进行压缩的文件类型
gzip_types      text/plain application/javascript application/x-javascript text/css application/xml text/javascript image/jpeg image/gif image/png image/jpg;
#根据客户端的HTTP头来判断是否需要压缩
gzip_vary       on;
#IE6不压缩
gzip_disable        "MSIE [1-6]\.";


#负载均衡
#静态服务器
upstream static_server{
    #这里可以在91服务器上起一个nginx监听8800端口专门做静态服务器,也可以起apache.
    #但我的静态资源放在本机上,所以这里用不到,下面只会配置location
    server 192.168.1.91:8800;
}

#动态服务器
upstream anfa_server{
    #weigth: 权值,权值越高被分配到的几率越大,默认是1.
    #down  : 当前server已停用
    #backup:当前server是备用服务器,只有其它非backup后端服务器都挂掉了或者很忙才会分配到请求
    #max_fails,fail_timeout: 
    #一般会关联使用,如果某台server在fail_timeout时间内出现了max_fails次连接失败,
    #那么Nginx会认为其已经挂掉了,从而在fail_timeout时间内不再去请求它,
    #fail_timeout默认是10s,max_fails默认是1,即默认情况是只要发生错误就认为服务器挂掉了,
    #如果将max_fails设置为0,则表示取消这项检查。server 192.168.1.82:9900 max_fails=1 fail_timeout=10s;
    
    server 192.168.1.82:9900 weight=1;
    server 192.168.1.82:9901 weight=1;
    
    #每个请求按照客户端IP的hash结果分配,客户端固定访问一个后端服务器,可以解决session一致问题
    #ip_hash;
    
    #按照后端服务器的响应时间分配请求,响应时间短优先分配
    #fair;
    
    #按照访问url的hash结果来分配,每个url定向到同一个服务器,主要应用于后端服务器为缓存时的场景下
    #此时,server语句中不能加weight等参数
    #hash $request_uri;
    #hash_method crc32;
    
    #keepalive可以简单的理解为连接池,要想启用需要在location作用域里配置proxy_http_version 1.1;和proxy_set_header Connection "";
    #官方示例如下 
    #location /http/ {
    #    proxy_pass http://http_backend;
    #    proxy_http_version 1.1;
    #    proxy_set_header Connection "";
    #    ...
    #}
    #这个值既不是越大越好也不是越小也好,具体参考https://sq.163yun.com/blog/article/190166026325086208
    keepalive 32;
}

charset utf-8;
proxy_cache_path proxy_cache_image levels=1:2 keys_zone=cache_image:100m;

server {
    listen       9888;
    
    #https相关
    #ssl on;
    #ssl_certificate /home/server/cert/server.crt;#服务的证书
    #ssl_certificate_key /home/server/cert/server.key;#服务端key
    
    #识别路径,同一个端口配置不同的server_name则会匹配到不同的配置
    server_name  localhost;
    
    #不区分大小写匹配括号内文件,由于我的静态文件在本地,所以注释掉
    #location ~* .(js|css|ico|png|jpg|eot|svg|ttf|woff) {
    #   #设置静态资源代理
    #   proxy_pass http://static_server;
    #   proxy_cache cache_image;
    #   proxy_cache_valid 200 304 302 5d;
    #   proxy_cache_valid any 5d;
    #   proxy_cache_key '$host:$server_port$request_uri';
    #   add_header X-Cache '$upstream_cache_status from $host';
    #   expires 30d; #让客户端缓存30天
    #}

    #不区分大小写,匹配
    location ~* /myurl {
        #设置静态资源直接从硬盘读取
        root  /home/server/static_content;
        index index.html app.html;
        expires 30d; #让客户端缓存30天
    }
 
    #反向代理到动态服务器
    location /tomcat/ {
        #设置代理,和upstream的名字一样
        proxy_pass   http://anfa_server;
        proxy_redirect             off; 
        proxy_set_header           Host $host; 
        #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
        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      65; #nginx跟后端服务器连接超时时间(代理连接超时)
        proxy_send_timeout         65; #后端服务器数据回传时间(代理发送超时)
        proxy_read_timeout         65; #连接成功后,后端服务器响应时间(代理接收超时)
        proxy_buffer_size          4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
        proxy_buffers              4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
        proxy_busy_buffers_size    64k; #高负荷下缓冲大小(proxy_buffers*2)
        
        #让keepalive起作用
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        
        #缓存配置
        proxy_temp_file_write_size 128k;#设定缓存文件夹大小,大于这个值,将从upstream服务器传
    }
    
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

这个配置就不过多解释了,都在注释里,需要说明的是关于https的证书制作

[root@centos]# openssl genrsa -des3 -out server.key 1024
[root@centos]# openssl req -new -key server.key -out server.csr
[root@centos]# cp server.key server.key.org
[root@centos]# openssl rsa -in server.key.org -out server.key
[root@centos]# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

你可能感兴趣的:(nginx(四、配置反向代理、负载均衡、https))