依赖模块
configure arguments: --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-ipv6 --with-http_v2_module --with-poll_module --with-http_realip_module --with-http_sub_module --with-http_gzip_static_module --with-http_dav_module --with-http_flv_module
通用配置
#启动用户
user root;
#设置所有worker进程数,建议等于CPU核心数
worker_processes 2;
#手动指定内核(2核cpu,开启4个进程:01 10 01 10;4个cpu,开启4个进程:0001 0010 0100 1000;其余同理)
worker_cpu_affinity 01 10;
#设置所有worker进程最大可以打开的文件数,默认为1024(可设置10240/655350)
worker_rlimit_nofile 10240;
#减少工作进程中的计时器分辨率,从而减少gettimeofday()系统调用次数
timer_resolution 100ms;
error_log logs/error.log warn;
pid logs/nginx.pid;
#指定worker子进程的nice值,以调整运行Nginx的优先级
worker_priority -10;
events {
#子进程能够处理的最大并发连接数
worker_connections 10240;
}
http {
#隐藏版本号
server_tokens off;
#控制并发连接数
limit_conn_zone $binary_remote_addr zone=ops:10m;
#限制单一虚拟服务器的总连接数
limit_conn_zone $server_name zone=coffee:10m;
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"';
#最小化 I/O 操作,Nginx 将等待将日志数据写入磁盘,直到填满 512KB 缓冲区或自上次刷新以来已过了 1 分钟(以先发生者为准)
access_log logs/access.log main buffer=512k flush=1m;
#开启高效传输模式
sendfile on;
#减少网络报文段的数量
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
#开启gzip减少服务器带宽占用
gzip on;
#默认off,该模块启用后,Nginx首先检查是否存在请求静态文件的 gz 结尾的文件,如果有则直接返回该 .gz 文件内容;
gzip_static on;
#默认off,nginx做为反向代理时启用,用于设置启用或禁用从代理服务器上收到相应内容gzip压缩;
gzip_proxied any;
#用于在响应消息头中添加Vary:Accept-Encoding,使代理服务器根据请求头中的Accept-Encoding识别是否启用gzip压缩
gzip_vary on;
#gzip压缩比,压缩级别是1-9,1压缩级别最低,9最高,级别越高压缩率越大,压缩时间越长,建议 4-6
gzip_comp_level 6;
#获取多少内存用于缓存压缩结果,16 8k 表示以 8k*16 为单位获得;
gzip_buffers 16 8k;
#允许压缩的页面最小字节数,页面字节数从header头中的Content-Length中进行获取。默认值是 0,不管页面多大都压缩。建议设置成大于 1k 的字节数,小于 1k 可能会越压越大;
gzip_min_length 1k;
#默认 1.1,启用 gzip 所需的 HTTP 最低版本;
gzip_http_version 1.1;
#设置resolver来指定DNS服务器地址,OCSP查询地址ocsp.int-x3.letsencrypt.org需要解析为IP地址。最好使用本地DNS服务,可以防止DNS欺骗(DNS spoofing)
resolver 8.8.8.8;
#负载均衡-轮询方式(略...就不写了)
#负载均衡-weight权重方式
upstream application {
#weight:默认1,weight越大,负载的权重就越大
server 127.0.0.1:8080 weight=1;
#max_fails:默认为1。某台Server允许请求失败的次数,超过最大次数后,在fail_timeout时间内,新的请求将不会分配给这台机器。如果设置为0,Nginx会将这台Server置为永久无效状态。
#fail_timeout:默认为10秒。某台Server达到max_fails次失败请求后,在fail_timeout期间内,nginx会认为这台Server暂时不可用,不会将请求分配给它。
server 127.0.0.2:8080 weight=2 max_fails=3 fail_timeout=15;
#backup:备份机,所有服务器挂了之后才会生效
server 127.0.0.3:8080 backup;
#down:表示单前的server临时不參与负载
server 127.0.0.4:8080 down;
}
#负载均衡-源地址哈希法(可以解决session一致性问题)
upstream application1 {
ip_hash;
server 127.0.0.1:8080;
server 127.0.0.2:8080;
}
#负载均衡-最少连接法(将用户的请求转发到有最少处理请求的服务器中)
upstream application2 {
least_conn;
server 127.0.0.1:8080;
server 127.0.0.2:8080;
}
server {
listen 80;
listen [::]:80;
server_name *.yourdomain.com;
#将所有HTTP请求通过rewrite指令重定向到HTTPS。
rewrite ^(.*)$ https://$host$1;
}
#以下属性中,以ssl开头的属性表示与证书配置有关。
server {
listen 443 ssl http2;
#配置HTTPS的默认访问端口为443。
#如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
#如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。
server_name *.yourdomain.com; #需要将yourdomain.com替换成证书绑定的域名。
client_max_body_size 50m;
limit_conn ops 15;
limit_conn coffee 2000;
ssl_certificate cert/cert-file-name.pem; #需要将cert-file-name.pem替换成已上传的证书文件的名称。
ssl_certificate_key cert/cert-file-name.key; #需要将cert-file-name.key替换成已上传的证书密钥文件的名称。
ssl_session_timeout 4h;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
#表示使用的加密套件TLS协议的类型。
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#启用OCSP Stapling,解决OCSP存在的隐私和性能问题(1.浏览器直接去请求第三方CA(Certificate Authority, 数字证书认证机构),会暴露网站的访客;2.浏览器进行OCSP查询会降低HTTPS性能)
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate cert/cert-file-name.pem; #需要将cert-file-name.pem替换成已上传的证书文件的名称。
#减小发送数据时buffer大小,默认16k,用于减小延迟
ssl_buffer_size 4k;
location / {
proxy_pass http://application;
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#添加响应头保证安全性
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
}
location ~* \.(?:jpg|jpeg|gif|png|ico|woff2)$ {
root /usr/local/nginx/static;
#静态资源防盗链
valid_referers none blocked yourdomain.com *.yourdomain.com;
if ($invalid_referer) {
return 403;
}
#设置客户端浏览器将字体和图像在本地缓存中保留
expires 20d;
#禁用页面资源请求的日志记录
access_log off;
add_header Pragma public;
add_header Cache-Control "public";
}
#建议把错误页面等静态文件都放到nginx下实现动静分离(看项目的整体设计了)
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}