nginx 加上ssl配置

2019独角兽企业重金招聘Python工程师标准>>> hot3.png


#user  nobody;

#双核2个进程
#worker_processes  2;
#worker_cpu_affinity 01 10; 

#8核开启8个进程
worker_processes 8; 
worker_cpu_affinity 10000000 01000000 00100000 00010000 00001000 00000100 00000010 00000001; 


error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

pid        logs/nginx.pid;

# 每进程最大可打开文件描述符数量(linux上文件描述符比较广义,网络端口、设备、磁盘文件都是)
# 文件描述符用完了,新的连接会被拒绝,产生502类错误
# linux最大可打开文件数可通过ulimit -n FILECNT或 /etc/security/limits.conf配置
# 理论值 系统最大数量 / 进程数。但进程间工作量并不是平均分配的,所以可以设置的大一些
#设置了这个后,修改worker_connections值时,是不能超过worker_rlimit_nofile的这个值。
worker_rlimit_nofile 65000; 

events {

   #使用最高效的IO模式
    use epoll;
   
    #单个进程最大连接数
    # 并发响应能力的关键配置值
    # 每个进程允许的最大同时连接数,work_connectins * worker_processes = maxConnection;
    # 要注意maxConnections不等同于可响应的用户数量,
    # 因为一般一个浏览器会同时开两条连接,如果反向代理,nginx到后端服务器的连接也要占用连接数
    # 所以,做静态服务器时,一般 maxClient = work_connectins * worker_processes / 2
    # 做反向代理服务器时 maxClient = work_connectins * worker_processes / 4
    
    # 这个值理论上越大越好,但最多可承受多少请求与配件和网络相关,也可最大可打开文件,最大可用sockets数量(约64K)有关
    worker_connections  10480;
}


    
    


http {
    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"';

    #access_log  logs/access.log  main;
    
    # 关闭此项可减少IO开销,但也无法记录访问信息,不利用业务分析,一般运维情况不建议使用,
    #如果不需要查看访问日志必须设置为0ff因为如果不设置为off那么它会自动打印的,注释了都没有用的
    access_log off;
    
    server_tokens   off; # 控制版本为了安全

     underscores_in_headers on;  #如果将其设置为off,那么当出现不合法的HTTP头部时,Nginx会拒绝        #服务,并直接向用户发送400(Bad Request)错误。如果将其设置为on,则会忽略此HTTP头部。

 

    sendfile        on;
    #防止网络阻塞
    tcp_nopush     on;

    #keepalive_timeout  0;
    # HTTP1.1支持持久连接alive
    # 降低每个连接的alive时间可在一定程度上提高可响应连接数量,所以一般可适当降低此值
    #长连接超时时间,单位是秒
    keepalive_timeout  50;

    
    #默认情况下,Nginx的gzip压缩是关闭的, gzip压缩功能就是可以让你节省不少带宽,但是会增加服务器CPU的开销哦
    #如果开启了反向代理,那么需要注意了,反向代理时候如果配置不好,有可能是会卡死的
    #开启压缩   
    gzip  on;
    
    
    #为指定的客户端禁用gzip功能,IE6或者更低版本禁用,IE6不支持压缩,为了兼容性
    gzip_disable "msie6"; 
    
    #判断客户端是否支持gzip压缩,如果不支持就不开启压缩
    gzip_vary on;
    
    #gzip压缩用于http1.1协议
    #gzip_http_version 1.1;
    
    #gzip_static 告诉nginx在压缩资源之前,先查找是否有预先gzip处理过的资源。
    #这要求你预先压缩你的文件(在这个例子中被注释掉了),
    #从而允许你使用最高压缩比,这样nginx就不用再压缩这些文件了
    # gzip_static on; 
    
    #默认值: gzip_buffers 4 4k/8k
    #作用域: http, server, location
    #设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。 例如 4 4k 代表以4k为单位,按照原始数据大小以4k为单位的4倍申请内存。
    # 4 8k 代表以8k为单位,按照原始数据大小以8k为单位的4倍申请内存。
    #如果没有设置,默认值是申请跟原始数据相同大小的内存空间去存储gzip压缩结果
    gzip_buffers 4 16k;
    
    #Nginx作为反向代理的时候启用,开启或者关闭后端服务器返回的结果,匹配的前提是后端服务器必须要返回包含”Via”的 header头。
    #允许或者禁止压缩基于请求和响应的响应流。我们设置为any,意味着将会压缩所有的请求
    #off 代理不压缩,默认设置是off,但是测试的时候发现这个配置不起作用,还是压缩了  如果代理服务器已经将对应的文件压缩了,那么这里不会对其再次压缩的,如果没有压缩,则会压缩
    #gzip_proxied off; 
    
    #设置对数据启用压缩的最少字节数。如果一个请求小于1000字节,我们最好不要压缩它,因为压缩这些小的数据会降低处理此请求的所有进程的速度。
    # 过短的内容压缩效果不佳,压缩过程还会浪费系统资源
    gzip_min_length 2048;
    
    #设置数据的压缩等级。这个等级可以是1-9之间的任意数值,9是最慢但是压缩比最大的。我们设置为4,这是一个比较折中的设置
    gzip_comp_level 6;
    
    #设置需要压缩的数据格式。下面例子中已经有一些了,你也可以再添加更多的格式。设置哪压缩种文本文件可参考 conf/mime.types   text/html无效了
    gzip_types  application/javascript text/plain text/css application/x-javascript application/xml application/xml+rss text/javascript; 
    
    
    

    server {
       
        
        #使用HTTPS 并且开启SSL
        listen       443 ssl;
        server_name  www.qzhibao.com;

        charset utf-8;

        #access_log  logs/host.access.log  main;
        
        
        #下面是专为 SSL的 配置 
        
        #公钥
        #证书其实是个公钥,它会被发送到连接服务器的每个客户端,ssl_certificate_key私钥是用来解密的,所以它的权限要得到保护但nginx的主进程能够读取。
        #当然私钥和证书可以放在一个证书文件中,这种方式也只有公钥证书才发送到client。
        ssl_certificate      /data/source/ssl_nginx/my_ssl/ssl-bundle.crt;
        #私钥
        ssl_certificate_key  /data/source/ssl_nginx/myserver4.key;
        
        #设置ssl/tls会话缓存的类型和大小。如果设置了这个参数一般是shared,buildin可能会参数内存碎片,
    #默认是none,和off差不多,停用缓存。如shared:SSL:10m表示我所有的nginx工作进程共享ssl会话缓存,官网介绍说1M可以存放约4000个sessions。
    #Session cache 的原理是使用 client hello 中的 session id 查询服务端的 session cache, 如果服务端有对应的缓存,
    #则直接使用已有的 session 信息提前完成握手,称为简化握手。
    #需要消耗服务端内存来存储 session 内
    #session id 是 TLS 协议的标准字段,市面上的浏览器全部都支持 session cache。
        ssl_session_cache    shared:SSL:10m;
    #客户端可以重用会话缓存中ssl参数的过期时间,内网系统默认5分钟太短了,可以设成30m即30分钟甚至4h。
        ssl_session_timeout  30m;
        
        #设置较长的keepalive_timeout也可以减少请求ssl会话协商的开销,但同时得考虑线程的并发数了
    #keepalive_timeout   50;
    
    #ssl_protocols指令用于启动特定的加密协议,nginx在1.1.13和1.0.12版本后默认是ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2,
    # TLSv1.1与TLSv1.2要确保OpenSSL >= 1.0.1 ,SSLv3 现在还有很多地方在用但有不少被攻击的漏洞。    
    ssl_protocols SSLv2 SSLv3 TLSv1; 
    
    #这里就是定义服务器的验证算法 ,加密算法
    #ssl_ciphers选择加密套件,不同的浏览器所支持的套件(和顺序)可能会不同。
    #这里指定的是OpenSSL库能够识别的写法,你可以通过 openssl -v cipher 'RC4:HIGH:!aNULL:!MD5'(后面是你所指定的套件加密算法) 来看所支持算法。
    ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
       
       #使用上面说明的 nginx配置的 验证算法,加密算法
        #设置协商加密算法时,优先使用我们服务端的加密套件,而不是客户端浏览器的加密套件
        ssl_prefer_server_ciphers  on;

        
        
    
        location ~.*\.(jpg|jpeg|png|doc|gif|htm|html|bmp|swf|ioc|rar|zip|txt|flv|mid|ppt|pdf|xls|mp3|wma)$ {
        
        #配置Nginx动静分离,定义的静态页面直接从Nginx发布目录读取,不过发布项目的时候得将项目也发到nginx的发布目录。这样做针对的是远程的动静分离,特别是负载均衡的时候更加需要使用了
        #也可以是后端服务器的项目地址,比如tomcat的,这样比较方便,不用将项目再次发布到nginx里面的,这样做针对与本地的动静分离
        #root    html;  
        #root    D:/tomcat/7.65/apache-tomcat-7.0.65-windows-x86/apache-tomcat-7.0.65/webapps;
        #root   /data/web/qzb_pc/target/qzb_pc-1.0-SNAPSHOT/WEB-INF/jsp;
        root    /data/web/qzbpc/target/qzbpc-1.0-SNAPSHOT/WEB-INF/jsp;
        #expires定义用户浏览器缓存的时间为15天,如果静态页面不常更新,可以设置更长,这样可以节省带宽和缓解服务器的压力        
        expires 7d; 
        }
        
        
        
         location / {
            #后端服务器数据回传时间(代理发送超时)  
            proxy_connect_timeout   60s; 
            
            #后端服务器数据回传时间(代理发送超时) 
            proxy_send_timeout      60s; 
            
            #连接成功后,后端服务器响应时间(代理接收超时)  
            proxy_read_timeout      60s; 
            
            
            #允许客户端请求的最大单文件字节数  
            client_max_body_size   10m; 
            
            
            #proxy_buffering:该指令控制缓冲是否启用。默认情况下,它的值是“on”。
            
            
            #缓冲区代理缓冲用户端请求的最大字节数
            client_body_buffer_size   128k;   
            
            
            #设置代理服务器(nginx)保存用户头信息的缓冲区大小
            #从后端服务器的响应头缓冲区大小,它包含headers,和其他部分响应是分开的。
            #该指令设置响应部分的缓冲区大小。默认情况下,它和proxy_buffers是相同的尺寸,
            #但因为这是用于头信息,这通常可以设置为一个较低的值。
            proxy_buffer_size   4k; 
            
            #proxy_buffers缓冲区,网页平均在32k以下的设置
            #该指令控制代理响应缓冲区的数量(第一个参数)和大小(第二个参数)。
            #默认配置是8个缓冲区大小等于一个内存页(4K或者8K)。
            #增加缓冲区的数目可以让你缓冲更多信息。
            proxy_buffers   4 32k; 
            
            #高负荷下缓冲大小(proxy_buffers*2)
            #此指令设置标注“client-ready”缓冲区的最大尺寸。
            #而客户端可以一次读取来自一个缓冲区的数据,缓冲被放置在队列中,批量发送到客户端。
            #此指令控制允许是在这种状态下的缓冲空间的大小。
            proxy_busy_buffers_size   64k; 
            
            #设定缓存文件夹大小,大于这个值,将从upstream服务器传
            #这是每个请求能用磁盘上临时文件最大大小。
            #这些当上游响应太大不能装配到缓冲区时被创建
            #没有设置缓存文件夹,所以不能直接设置这个,否则报错
            #proxy_max_temp_file_size 2048m;
            
            #这是当被代理服务器的响应过大时Nginx一次性写入临时文件的数据量。
            proxy_temp_file_write_size  64k;
        
           # root   html;
           # index  index.html index.htm;
            
            
            
        
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
            
        #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    
        
        proxy_pass http://www.qzhibao.com:9090;        
            
        }
        
        
        

       

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

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }
    
    
    
    server{
       listen       80;
       server_name  qzhibao.com  www.qzhibao.com;
       charset utf-8;
       
       location ~.webscan_360_cn\.(html)$ {
        
        #配置Nginx动静分离,定义的静态页面直接从Nginx发布目录读取,不过发布项目的时候得将项目也发到nginx的发布目录。这样做针对的是远程的动静分离,特别是负载均衡的时候更加需要使用了
        #也可以是后端服务器的项目地址,比如tomcat的,这样比较方便,不用将项目再次发布到nginx里面的,这样做针对与本地的动静分离
        #root    html;  
        #root    D:/tomcat/7.65/apache-tomcat-7.0.65-windows-x86/apache-tomcat-7.0.65/webapps;
        #root   /data/web/qzb_pc/target/qzb_pc-1.0-SNAPSHOT/WEB-INF/jsp;
        root    /data/web/qzbpc/target/qzbpc-1.0-SNAPSHOT/WEB-INF/jsp;
        #expires定义用户浏览器缓存的时间为15天,如果静态页面不常更新,可以设置更长,这样可以节省带宽和缓解服务器的压力        
        #expires 7d; 
        }
       
       location / {
            #必须将rewrite放入location里面,否则上面的localtion那个就不起效果了
            rewrite  ^(.*)    https://www.qzhibao.com$1 permanent; 
        }
        
        
       
      
    }
    
    server{
       #监听443端口,因为https默认的端口就是443的,就算没有使用ssl证书,也是可以安全的打开和使用的,不会提示不安全,如果使用不够好的ssl,浏览器可能会拦截的
       listen       443;
       server_name    qzhibao.com;
       charset utf-8;
       
       rewrite  ^(.*)    https://www.qzhibao.com$1 permanent; 
    }
    
    server{
       listen       80;
       server_name    m.qzhibao.com;
       charset utf-8;
       rewrite  ^(.*)    https://m.qzhibao.com$1 permanent; 
    }
    
    
    
    
    
    
    
     server {
        #listen       80;
        listen       443 ssl;
        server_name  m.qzhibao.com;

        charset utf-8;

        #access_log  logs/host.access.log  main;
        
        
        #下面是专为 SSL的 配置 
        
        #公钥
        #证书其实是个公钥,它会被发送到连接服务器的每个客户端,ssl_certificate_key私钥是用来解密的,所以它的权限要得到保护但nginx的主进程能够读取。
        #当然私钥和证书可以放在一个证书文件中,这种方式也只有公钥证书才发送到client。
        ssl_certificate        /data/source/ssl_nginx/my_ssl/ssl-bundle.crt;
        #私钥
        ssl_certificate_key    /data/source/ssl_nginx/myserver4.key;
        
        #设置ssl/tls会话缓存的类型和大小。如果设置了这个参数一般是shared,buildin可能会参数内存碎片,
    #默认是none,和off差不多,停用缓存。如shared:SSL:10m表示我所有的nginx工作进程共享ssl会话缓存,官网介绍说1M可以存放约4000个sessions。
    #Session cache 的原理是使用 client hello 中的 session id 查询服务端的 session cache, 如果服务端有对应的缓存,
    #则直接使用已有的 session 信息提前完成握手,称为简化握手。
    #需要消耗服务端内存来存储 session 内
    #session id 是 TLS 协议的标准字段,市面上的浏览器全部都支持 session cache。
        ssl_session_cache    shared:SSL:10m;
    #客户端可以重用会话缓存中ssl参数的过期时间,内网系统默认5分钟太短了,可以设成30m即30分钟甚至4h。
        ssl_session_timeout  30m;
        
        #设置较长的keepalive_timeout也可以减少请求ssl会话协商的开销,但同时得考虑线程的并发数了
    #keepalive_timeout   50;
    
    #ssl_protocols指令用于启动特定的加密协议,nginx在1.1.13和1.0.12版本后默认是ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2,
    # TLSv1.1与TLSv1.2要确保OpenSSL >= 1.0.1 ,SSLv3 现在还有很多地方在用但有不少被攻击的漏洞。    
    ssl_protocols SSLv2 SSLv3 TLSv1; 
    
    #这里就是定义服务器的验证算法 ,加密算法
    #ssl_ciphers选择加密套件,不同的浏览器所支持的套件(和顺序)可能会不同。
    #这里指定的是OpenSSL库能够识别的写法,你可以通过 openssl -v cipher 'RC4:HIGH:!aNULL:!MD5'(后面是你所指定的套件加密算法) 来看所支持算法。
    ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
       
       #使用上面说明的 nginx配置的 验证算法,加密算法
        #设置协商加密算法时,优先使用我们服务端的加密套件,而不是客户端浏览器的加密套件
        ssl_prefer_server_ciphers  on;
        
        
        
        location ~.*\.(jpg|jpeg|png|doc|gif|htm|html|bmp|swf|ioc|rar|zip|txt|flv|mid|ppt|pdf|xls|mp3|wma)$ {
        
        #配置Nginx动静分离,定义的静态页面直接从Nginx发布目录读取,不过发布项目的时候得将项目也发到nginx的发布目录。这样做针对的是远程的动静分离,特别是负载均衡的时候更加需要使用了
        #也可以是后端服务器的项目地址,比如tomcat的,这样比较方便,不用将项目再次发布到nginx里面的,这样做针对与本地的动静分离
        #root    html;  
        #root    D:/tomcat/7.65/apache-tomcat-7.0.65-windows-x86/apache-tomcat-7.0.65/webapps;
        #root   /data/web/qzb_2/target/qzb-2.0-SNAPSHOT/WEB-INF/jsp;
        root    /data/web/qzb/target/qzb-2.0-SNAPSHOT/WEB-INF/jsp;
        #expires定义用户浏览器缓存的时间为15天,如果静态页面不常更新,可以设置更长,这样可以节省带宽和缓解服务器的压力        
        expires 7d; 
        }
        
        
        
         location / {
            #后端服务器数据回传时间(代理发送超时)  
            proxy_connect_timeout   60s; 
            
            #后端服务器数据回传时间(代理发送超时) 
            proxy_send_timeout      60s; 
            
            #连接成功后,后端服务器响应时间(代理接收超时)  
            proxy_read_timeout      60s; 
            
            
            #允许客户端请求的最大单文件字节数  
            client_max_body_size   10m; 
            
            
            #proxy_buffering:该指令控制缓冲是否启用。默认情况下,它的值是“on”。
            
            
            #缓冲区代理缓冲用户端请求的最大字节数
            client_body_buffer_size   128k;   
            
            
            #设置代理服务器(nginx)保存用户头信息的缓冲区大小
            #从后端服务器的响应头缓冲区大小,它包含headers,和其他部分响应是分开的。
            #该指令设置响应部分的缓冲区大小。默认情况下,它和proxy_buffers是相同的尺寸,
            #但因为这是用于头信息,这通常可以设置为一个较低的值。
            proxy_buffer_size   4k; 
            
            #proxy_buffers缓冲区,网页平均在32k以下的设置
            #该指令控制代理响应缓冲区的数量(第一个参数)和大小(第二个参数)。
            #默认配置是8个缓冲区大小等于一个内存页(4K或者8K)。
            #增加缓冲区的数目可以让你缓冲更多信息。
            proxy_buffers   4 32k; 
            
            #高负荷下缓冲大小(proxy_buffers*2)
            #此指令设置标注“client-ready”缓冲区的最大尺寸。
            #而客户端可以一次读取来自一个缓冲区的数据,缓冲被放置在队列中,批量发送到客户端。
            #此指令控制允许是在这种状态下的缓冲空间的大小。
            proxy_busy_buffers_size   64k; 
            
            #设定缓存文件夹大小,大于这个值,将从upstream服务器传
            #这是每个请求能用磁盘上临时文件最大大小。
            #这些当上游响应太大不能装配到缓冲区时被创建
            #没有设置缓存文件夹,所以不能直接设置这个,否则报错
            #proxy_max_temp_file_size 2048m;
            
            #这是当被代理服务器的响应过大时Nginx一次性写入临时文件的数据量。
            proxy_temp_file_write_size  64k;
        
           # root   html;
           # index  index.html index.htm;
            
            
            
        
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
            
        #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    
        
        proxy_pass http://m.qzhibao.com:9090;        
            
        }
        
        
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

       
    }
    
    
    
    
    
    
     server {
       
        listen       9446 ssl;
        server_name  m.qzhibao.com;

        charset utf-8;

        #access_log  logs/host.access.log  main;
        
        
        #下面是专为 SSL的 配置 
        
        #公钥
        #证书其实是个公钥,它会被发送到连接服务器的每个客户端,ssl_certificate_key私钥是用来解密的,所以它的权限要得到保护但nginx的主进程能够读取。
        #当然私钥和证书可以放在一个证书文件中,这种方式也只有公钥证书才发送到client。
        ssl_certificate        /data/source/ssl_nginx/my_ssl/ssl-bundle.crt;
        #私钥
        ssl_certificate_key    /data/source/ssl_nginx/myserver4.key;
        
        #设置ssl/tls会话缓存的类型和大小。如果设置了这个参数一般是shared,buildin可能会参数内存碎片,
    #默认是none,和off差不多,停用缓存。如shared:SSL:10m表示我所有的nginx工作进程共享ssl会话缓存,官网介绍说1M可以存放约4000个sessions。
    #Session cache 的原理是使用 client hello 中的 session id 查询服务端的 session cache, 如果服务端有对应的缓存,
    #则直接使用已有的 session 信息提前完成握手,称为简化握手。
    #需要消耗服务端内存来存储 session 内
    #session id 是 TLS 协议的标准字段,市面上的浏览器全部都支持 session cache。
        ssl_session_cache    shared:SSL:10m;
    #客户端可以重用会话缓存中ssl参数的过期时间,内网系统默认5分钟太短了,可以设成30m即30分钟甚至4h。
        ssl_session_timeout  30m;
        
        #设置较长的keepalive_timeout也可以减少请求ssl会话协商的开销,但同时得考虑线程的并发数了
    #keepalive_timeout   50;
    
    #ssl_protocols指令用于启动特定的加密协议,nginx在1.1.13和1.0.12版本后默认是ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2,
    # TLSv1.1与TLSv1.2要确保OpenSSL >= 1.0.1 ,SSLv3 现在还有很多地方在用但有不少被攻击的漏洞。    
    ssl_protocols SSLv2 SSLv3 TLSv1; 
    
    #这里就是定义服务器的验证算法 ,加密算法
    #ssl_ciphers选择加密套件,不同的浏览器所支持的套件(和顺序)可能会不同。
    #这里指定的是OpenSSL库能够识别的写法,你可以通过 openssl -v cipher 'RC4:HIGH:!aNULL:!MD5'(后面是你所指定的套件加密算法) 来看所支持算法。
    ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
       
       #使用上面说明的 nginx配置的 验证算法,加密算法
        #设置协商加密算法时,优先使用我们服务端的加密套件,而不是客户端浏览器的加密套件
        ssl_prefer_server_ciphers  on;
        
        
        #目前不要缓存js和css因为经常更新
        location ~.*\.(jpg|jpeg|png|doc|gif|htm|html|bmp|swf|ioc|rar|zip|txt|flv|mid|ppt|pdf|xls|mp3|wma)$ {
        
        #配置Nginx动静分离,定义的静态页面直接从Nginx发布目录读取,不过发布项目的时候得将项目也发到nginx的发布目录。这样做针对的是远程的动静分离,特别是负载均衡的时候更加需要使用了
        #也可以是后端服务器的项目地址,比如tomcat的,这样比较方便,不用将项目再次发布到nginx里面的,这样做针对与本地的动静分离
        #root    html;  
        #root    D:/tomcat/7.65/apache-tomcat-7.0.65-windows-x86/apache-tomcat-7.0.65/webapps;
        #root   /data/web/qzb_2/target/qzb-2.0-SNAPSHOT/WEB-INF/jsp;
        root    /data/web/qzb_app/target/qzb_app-1.0-SNAPSHOT/WEB-INF/jsp;
        
        #expires定义用户浏览器缓存的时间为15天,如果静态页面不常更新,可以设置更长,这样可以节省带宽和缓解服务器的压力        
        expires 7d; 
        }
        
        
        
         location / {
            #后端服务器数据回传时间(代理发送超时)  
            proxy_connect_timeout   60s; 
            
            #后端服务器数据回传时间(代理发送超时) 
            proxy_send_timeout      60s; 
            
            #连接成功后,后端服务器响应时间(代理接收超时)  
            proxy_read_timeout      60s; 
            
            
            #允许客户端请求的最大单文件字节数  
            client_max_body_size   10m; 
            
            
            #proxy_buffering:该指令控制缓冲是否启用。默认情况下,它的值是“on”。
            
            
            #缓冲区代理缓冲用户端请求的最大字节数
            client_body_buffer_size   128k;   
            
            
            #设置代理服务器(nginx)保存用户头信息的缓冲区大小
            #从后端服务器的响应头缓冲区大小,它包含headers,和其他部分响应是分开的。
            #该指令设置响应部分的缓冲区大小。默认情况下,它和proxy_buffers是相同的尺寸,
            #但因为这是用于头信息,这通常可以设置为一个较低的值。
            proxy_buffer_size   4k; 
            
            #proxy_buffers缓冲区,网页平均在32k以下的设置
            #该指令控制代理响应缓冲区的数量(第一个参数)和大小(第二个参数)。
            #默认配置是8个缓冲区大小等于一个内存页(4K或者8K)。
            #增加缓冲区的数目可以让你缓冲更多信息。
            proxy_buffers   4 32k; 
            
            #高负荷下缓冲大小(proxy_buffers*2)
            #此指令设置标注“client-ready”缓冲区的最大尺寸。
            #而客户端可以一次读取来自一个缓冲区的数据,缓冲被放置在队列中,批量发送到客户端。
            #此指令控制允许是在这种状态下的缓冲空间的大小。
            proxy_busy_buffers_size   64k; 
            
            #设定缓存文件夹大小,大于这个值,将从upstream服务器传
            #这是每个请求能用磁盘上临时文件最大大小。
            #这些当上游响应太大不能装配到缓冲区时被创建
            #没有设置缓存文件夹,所以不能直接设置这个,否则报错
            #proxy_max_temp_file_size 2048m;
            
            #这是当被代理服务器的响应过大时Nginx一次性写入临时文件的数据量。
            proxy_temp_file_write_size  64k;
        
           # root   html;
           # index  index.html index.htm;
            
            
            
        
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
            
        #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    
        
        proxy_pass http://m.qzhibao.com:9292;        
            
        }
        
        
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

       
    }
    
    
    
    
    
    
    
    #server{
    #   listen 80;
    #   server_name t2.qzhibao.com;
    #   charset utf-8;
    #可以跳转的,301重定向, permanent是永久跳转, redirect是单次重定向使用
    #   rewrite  ^(.*)    http://tpc.qzhibao.com:9090$1 permanent; 
    #  
    #}


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #监听443 端口,并且开启 ssl 的证书模式
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}
 

转载于:https://my.oschina.net/u/2419285/blog/811179

你可能感兴趣的:(nginx 加上ssl配置)