Ted's Blog



nginx配置HTTPS

使用ssl模块配置同时支持http和https并存

一,生成证书

# 1、首先,进入你想创建证书和私钥的目录,例如:
cd /etc/nginx/

# 2、创建服务器私钥,命令会让你输入一个口令:
openssl genrsa -des3 -out server.key 1024

# 3、创建签名请求的证书(CSR):
openssl req -new -key server.key -out server.csr

# 4、在加载SSL支持的Nginx并使用上述私钥时除去必须的口令:
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key

# 5、最后标记证书使用上述私钥和CSR:
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt


二,配置nginx

server {
    set $yii_bootstrap "index.php";
    charset         utf-8;
    client_max_body_size 128M;
    listen          80;
    listen          443;

    ssl                  on;
    ssl_certificate      /etc/nginx/server.crt;
    ssl_certificate_key  /etc/nginx/server.key;

    ssl_session_timeout  5m;

    server_name     xxx.xxx.com;
    root            目录名称;
    index           $yii_bootstrap index.html index.php;
    error_page      403 404  /404.html;

    location / {
        # Redirect everything that isn't real file to yii bootstrap file including arguments.
        try_files $uri $uri/ /$yii_bootstrap?$args;
    }

    # uncomment to avoid processing of calls to non-existing static files by Yii
    location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar|ttf|woff|otf)$ {
        try_files $uri =404;
    }

    location ~ \.php$ {
        include /usr/local/nginx/conf/fastcgi.conf;
        fastcgi_pass   127.0.0.1:9000;
    }

}


重启nginx 后访问 https://xxx.xxx.com 即可


三、受浏览器信任的StartSSL免费SSL证书:

跟VeriSign一样,StartSSL(网址:http://www.startssl.com,公司名:StartCom)也是一家CA机构,

它的根证书很 久之前就被一些具有开源背景的浏览器支持(Firefox浏览器、谷歌Chrome浏览器、苹果Safari浏览器等)。


四、项目需要,将访问目录 \services\ 由http访问 重定向到 https (解决方法:nginx rewrite 加上 location 方式实现)

location ~ /services/.*$ {        if ($server_port ~ "^80$"){
            set $rule_0 1$rule_0;
        }        if ($rule_0 = "1"){
            rewrite /(.*) https://xxx.xxx.com/$1 permanent;                       break;
        }
    }


五,配置结束上传以后用nginx -t 测试下配置无误 就reload一下nginx服务 检查443端口是否在监听

/usr/local/nginx/sbin/nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok   nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful (显示表示配置文件没有错误) service nginx reload (重新加载nginx服务)   netstat -lan | grep 443 (查看443端口)   tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN (有看到这一行 就表示HTTPS已经在工作了)


五,可能出现的问题

提示错误信息 nginx: [emerg] unknown directive "ssl"

这表默认情况下ssl模块并未被安装,如果使用该模块则需要在编译nginx时指定 -with-http_ssl_module参数




文章引用:http://blog.csdn.net/weixin_35884835/article/details/52588157


分享:

写评论


Contact ME

github:https://github.com/tebie6

email:liumingyuphp@163.com

友情链接

无敌我大鑫哥:http://dream128.cn