• 欢迎浏览“String me = Creater\忠实的资深Linux玩家;”,请文明浏览,理性发言,有侵犯你的权益请邮件我(creater@vip.qq.com).
  • 把任何的失败都当作一次尝试,不要自卑;把所有的成功都想成是一种幸运,不要自傲。
  •    2年前 (2016-10-05)  软件 |   1 条评论  9 
    文章评分 1 次,平均分 5.0

    跑在互联网上的应用,绝大多数都是https的了,nginx一般都是作为系统接入层的服务(提供负载均衡、反向代理,或作为前端服务器),可以在这层配置https,作为整个应用体系的关口。 我们一般在windows平台进行开发,所以本文以window平台为例,介绍nginx的https的配置

    1.下载安装nginx:

    nginx可以从这里选择对应版本下载,我下载的是1.8.1版本。下载完成后,直接解压缩,命令窗口进入根目录,输入命令:

    start nginx

    在浏览器中,直接输入"localhost",可以看到nginx的欢迎页,表明启动成功。

    2.下载安装openssl:

    可从这里选择适合自己的版本下载,我下载的是:Win64 OpenSSL v1.1.0b Light,下载完成后,直接双击安装(安装选项一般默认即可)

    3.生成证书

    在nginx根目录下新建ssl文件夹(名字可以自己定),并在命令窗口进入此目录,按照如下的几个命令,完成证书创建过程。

    #此步用于生成私钥,会提示输入密码,密码后面步骤需要用到;test.key为私钥的名字,文件名可自己定
    openssl genrsa -des3 -out test.key 1024
    #此步用于生成csr证书,test.key为上一步骤生成的私钥名,test.csr为证书,证书文件名可自定
    #在此步过程中,会交互式输入一系列的信息(所在国家、城市、组织等),其中Common Name一项代表nginx服务访问用到的域名,我这里是本地测试,所以可以随意定一个test.com,并在本地host文件中将此域名映射为127.0.0.1
    openssl req -new -key test.key -out test.csr
    #此步用于去除访问密码,如果不执行此步,在配置了ssl后,nginx启动会要求输入密码
    #test.key为需要密码的key,test-np.key为去除访问密码的key文件
    #操作过程中会要求输入密码,密码为生成key文件时的密码
    openssl rsa -in test.key -out test-np.key
    #此步用于生成crt证书
    #test.crt为第2步生成的csr证书名称,test.crt为要生成的证书名称
    openssl x509 -req -days 366 -in test.csr -signkey test-np.key -out test.crt

    经过以上几个步骤,证书生成完毕,ssl文件夹下的test.crt和test-np.key为我们后续要使用的文件。

    注:在执行openssl命令时,可能会出现提示找不到openssl配置文件:

    can't open config file: /etc/ssl/openssl.cnf

    实际配置文件存在,但不在这个目录(可以在openssl安装目录找到),我们可以直接在命令窗口设置下环境变量,使其指向正确的位置

    #请根据你自己的安装目录调整
    set OPENSSL_CONF=C:\OpenSSL-Win64\bin\openssl.cfg

    4.nginx配置ssl
    打开nginx目录下conf\nginx.conf文件,找到HTTPS server的配置,将配置项前面的注释符号去掉
    修改前配置内容如下:

    # HTTPS server
        #
        #server {
        #    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 server
    
        server {
            listen       443 ssl;
            server_name  front;
    
            ssl_certificate      ./ssl/test.crt;
            ssl_certificate_key  ./ssl/test-np.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;
            }
        }

    5.配置重定向,http请求自动跳转到https

    如果我们希望强制使用https,可以将http的请求重定向到https,只需要在http对应server配置中添加rewrite

    server {
            listen       80;
            server_name  test.com;        
            rewrite ^(.*) https://$server_name$1 permanent; 
            #省略其他配置......
    }

    6.启动nginx

    命令窗口进入到nginx根目录,使用以下命令重新加载nginx配置文件

    nginx -s reload

    这里有两点需要注意:

    1)由于nginx的cache模块需要用到共享内容,所以官方提示在window Vista之后的版本是不支持cache模块的,所以在配置文件中,ssl_session_cache一行不要注释掉,否则启动会报错

    2)nginxssl使用的是443端口,如果系统中443已经被占用,在nginx的error.log文件中会有报错,且无法正常启动

    bind() to 0.0.0.0:443 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions)

    遇到这个问题,可在命令窗口通过以下命令查找占用端口的进程

    netstat -ano|findstr "443"

    结果列表中第2列代表进程监听的ip和端口,最后一列代表进程id,可根据id杀掉对应进程即可(有些进程是由系统服务启动的,需要关闭服务才行)。

    正常启动后,浏览器中输入https://test.com(test.com是在第3步第2个命令中指定的),出现nginx欢迎页面,说明已配置成功。

     

    除特别注明外,本站所有文章均为String me = "Creater\忠实的资深Linux玩家";原创,转载请注明出处来自http://unix8.net/home.php/5232.html

    关于

    发表评论

    1. :evil: 我都上https了,您老的还没上
      https://splayx.com/

      w703710691d 评论达人 LV.2 2年前 (2016-10-24) [0] [0]
    切换注册

    登录

    忘记密码 ?

    切换登录

    注册

    扫一扫二维码分享