强制HTTPS安全访问

在搭建个人网站访问时,一开始未设置ssl+http的https安全访问模式,而是通过http访问,但当域名注册及网站备案成功后,则存在以下三个风险:

  • 数据被监听窃取:通过软件抓包,可以看到请求的内容
  • 数据被篡改: 请求的数据被修改
  • 中间人重放攻击:数据被中间人监听到,再次发送给服务器

HTTPS是HTTP的基础上加入SSL,通过传输加密和身份认证保证了数据传输过程的安全性。

强制HTTPS访问的方法也有多种:

  • 可在页面中添加JS脚本
  • 在后端程序中添加重定向
  • 通过Web服务器实现跳转
  • Nginx支持rewrite功能

在这里我是使用了nginx的方式,通过修改nginx配置来达到强制https访问的形式,在配置文件server中增加return 301 https://$host$request_uri;,即可将默认80端口的请求重定向为 HTTPS

# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

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  /var/log/nginx/access.log  main;

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

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;
    
    # SSL配置,填写你得到的ssl证书和key,此处我将两个文件放在nginx配置目录下
    ssl_certificate edicaran.cafe_bundle.crt;
    ssl_certificate_key edicaran.cafe.key;

    server {
        listen 443 ssl;
        #填写绑定证书的域名
        server_name edicaran.cafe; 
        #证书文件名称
        ssl_certificate  edicaran.cafe_bundle.crt;
        #私钥文件名称
        ssl_certificate_key edicaran.cafe.key;
        ssl_session_timeout 5m;
        # ssl密钥,此处自填
        ssl_ciphers XXXXXXXXXXXXXXXXXX;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        # 网站根目录、主页目录等,下为例子
        root /typecho/index;
        
        include /etc/nginx/default.d/*.conf;
        
        # PHP页面访问
        location ~ \.php$ {
            include fastcgi_params;
            fastcgi_pass unix:/run/php-fpm/www.sock;
            
            client_max_body_size 20m;
            fastcgi_connect_timeout 30s;
            fastcgi_send_timeout 30s;
            fastcgi_read_timeout 30s;
            fastcgi_intercept_errors on;
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
    
    server {
        listen 80 default_server;
        listen [::]:80 default_server;
        server_name edicaran.cafe;
        return 301 https://$host$request_uri;
    }
}

成功!
强制https安全访问的nginx配置记录