依赖模块

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;
        }
    }
}