/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