Nginx是一款轻量级的Web服务器、反向代理服务器及电子邮件(IMAP/POP3)代理服务器。
Http(超文本传输协议)被用于浏览器和web 服务器之间传递消息,http协议以明文方式发送内容,不提供任何方式的数据加密,所以攻击者能够截取传输报文获取信息。
为了数据传输的安全,在http的基础上加入了ssl协议就成了https协议,ssl依靠证书来验证服务器的身份,并为浏览器和服务器之间的通讯加密。javascript
SSL协议位于TCP/IP协议与各类应用层协议之间,可分为两层:
(1)SSL记录协议(SSL Record Protocol):它创建在可靠的传输协议(如TCP)上,为高层协议提供数据封装、压缩、加密等基本功能的支持。
(2)SSL握手协议(SSL Handshake Protocol):它创建在SSL记录协议上,用于在实际的数据传输开始前,通信双方进行身份验证、协商加密算法、交换加密密钥等。css
采用Https的服务器必须从证书颁发机构CA(Certificate Authority)申请一个用于证实服务器用途类型的证书,有收费的也有免费的,也能够经过OpenSSL本身造一个证书,不过浏览器是不信任你本身造的证书的,在访问时,会提醒”您的链接不是私密链接“,在这咱们使用的是Let's Encrypt免费证书。html
(1) 安装Let's Encrypt推荐获取证书的客户端 Certbotsudo apt-get install certbot
(2)获取证书(两种模式)java
certbot certonly --webroot /var/www/example -d example.com -d www.example.com
这个命令会为 example.com 和 www.example.com 这两个域名生成一个证书,会在 /var/www/example 中建立 .well-known 文件夹,这个文件夹里面包含了一些验证文件,certbot 会经过访问 example.com/.well-known/acme-challenge 来验证你的域名是否绑定的这个服务器。nginx
certbot certonly --standalone -d example.com -d www.example.com
这种模式不须要指定网站根目录,他会自动启用服务器的443端口来验证域名的归属,因此若是有其余服务(如nginx)占用了443端口sudo lsof -n -P|grep:443
,须要先中止这些服务,在证书生成完毕后,再启用。web
server { listen 443; server_name example.com www.example.com; ssl on; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; location / { proxy_pass http://localhost:port/; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_read_timeout 600; gzip on; gzip_disable "MSIE [1-6]\.(?!.*SV1)"; client_max_body_size 10M; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_buffers 16 8k; gzip_http_version 1.1; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript; } } server{ //当用http://...访问时重定向至https://... listen 80; server_name example.com www.example.com; return 301 https://www.example.com; }
重启Nginx服务,便可使用https://www.example.com
访问该网站算法
let's Encrypt证书只有90天的有效期,因此在证书到期以前,咱们须要从新获取这些证书,可使用certbot renew
这个命令。(若是生成证书时使用--standalone模式,更新证书时也要暂停当前443端口运行的程序)json
详见:Nginx配置文件(nginx.conf)配置详解浏览器
先用sudo nginx -t
检测下配置文件,再看下错误日志,以后Google。
详见:Nginx常见错误与解决办法安全
sudo nginx -c /path/to/nginx.conf
sudo nginx -s reload
sudo nginx -t
暂停nginx服务
ps -ef|grep nginx
查看nginx占用的进程sudo kill -QUIT 28478
(28478为nginx的主进程号)