Nginx 配置同时支持 HTTP 和HTTPS

本文将介绍怎样通过 Nginx 配置同时支持 HTTP 和 HTTPS 功能。

现在的网站支持 HTTPS 几乎是标配功能,Nginx 能很好的支持 HTTPS 功能。下面列举一个 Nginx 配置,该配置同时支持 HTTP 和 HTTPS 功能。

注意:既然选择使用 HTTPS,就是为了保证通信安全,那么就没必要再用 HTTP 进行通信了。在 URL 中还支持 HTTP 的方式,主要是为了用户不知道网站支持 HTTPS,还是使用 HTTP 的方式进行访问。这时 Nginx 后台需要自动将 HTTP 请求转成 HTTPS 的方式,这样就又能支持 HTTP,又能保证通信安全了。

Nginx 配置如下:

http {
    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  /usr/local/nginx/logs/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /usr/local/nginx/conf/mime.types;
    default_type        application/octet-stream;
    #...

    server {
        listen  80;
        server_name domain_name;
        rewrite ^/(.*) https://$server_name$request_uri? permanent;
    }

    server {
        # 配置 HTTPS 的默认访问端口号为 443。
        # 此处如果未配置 HTTPS 的默认访问端口,可能会造成 Nginx 无法启动。
        # Nginx 1.15.0 以上版本请使用 listen 443 ssl 代替 listen 443 和 ssl on。
        listen 443 ssl;
        server_name domain_name;
        charset utf-8;

        # 证书的文件名称
        ssl_certificate cert/domain_name.pem;

        # 证书的密钥文件名称
        ssl_certificate_key cert/domain_name.key;
        ssl_session_timeout 5m;

        # 使用此加密套件
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;

        # 使用该协议进行配置
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        # ...
    }
    # ...
}

注意:上面的 cert 目录位于 $NGINX_HOME/conf/cert,因此证书路径为 $NGINX_HOME/cert/domain_name.pem 和 $NGINX_HOME/cert/domain_name.key。

在年轻人的颈项上,没有什么东西能比事业心这颗灿烂的宝珠更迷人的了。 —— 哈菲兹
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号