記一次免費讓網站啟用HTTPS的過程


寫在前面

個人網站運行將近2個月了,期間根據酷殼的一篇教程如何免費的讓網站啟用HTTPS做了一次,中間遇到問題就放下了。昨天孫三苗問我網站地址說要添加友鏈,出於好奇想看他網站長什么樣,順道也加一下友鏈。訪問后發現他網站已經啟用https了,於是按捺不住內心的沖動。以下是采用Let’s Encrypt免費方案,以及過程中遇到的問題和解決辦法。

 

環境

阿里雲服務器 ECS

centos 7

nginx

 

操作步驟

訪問 https://certbot.eff.org 選擇相應的SoftWare和System。(比如我的Nginx和Centos/Rhel7)

按頁面所示步驟執行:

1)安裝Certbot

$ yum -y install yum-utils $ yum-config-manager --enable rhui-REGION-rhel-server-extras rhui-REGION-rhel-server-optional

  

$ sudo yum install certbot python2-certbot-nginx

 

2)獲取證書

$ sudo certbot --nginx certonly

執行到這一步出問題了,問題大致是 /etc/nginx 下找不到相應文件夾,certbot 獲取證書的同時會修改nginx的配置文件,找不到該文件所以才會報錯因為我的Nginx並沒有安裝在/etc目錄下,而是在/usr/bin/nginx。各人情況可能不太一樣,可以通過命令查看你的nginx目錄(我的nginx配置文件在/usr/local/nginx/conf/下名為nginx.conf)

$ which nginx

解決辦法:(這兩行命令大致就是使目錄之間建立軟連接,進行同步)

$ ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
$ ln -s /usr/local/nginx/conf/ /etc/nginx

然后,繼續執行獲取證書時出問題的命令:

$ sudo certbot --nginx certonly

按提示回車就行了~

 

3)查看nginx配置文件信息 (/usr/local/nginx/conf/nginx.conf)

 1 user www www;  2 
 3 worker_processes auto;  4 
 5 error_log  /home/wwwlogs/nginx_error.log crit;  6 
 7 pid        /usr/local/nginx/logs/nginx.pid;  8 
 9 #Specifies the value for maximum file descriptors that can be opened by this process.  10 worker_rlimit_nofile 51200;  11 
 12 events  13  {  14  use epoll;  15         worker_connections 51200;  16  multi_accept on;  17  }  18 
 19 http  20  {  21  include mime.types;  22         default_type  application/octet-stream;  23 
 24         server_names_hash_bucket_size 128;  25  client_header_buffer_size 32k;  26         large_client_header_buffers 4 32k;  27  client_max_body_size 100m;  28 
 29  sendfile on;  30  tcp_nopush on;  31 
 32         keepalive_timeout 60;  33 
 34  tcp_nodelay on;  35 
 36         fastcgi_connect_timeout 300;  37         fastcgi_send_timeout 300;  38         fastcgi_read_timeout 300;  39  fastcgi_buffer_size 64k;  40         fastcgi_buffers 4 64k;  41  fastcgi_busy_buffers_size 128k;  42  fastcgi_temp_file_write_size 256k;  43 
 44  gzip on;  45  gzip_min_length 1k;  46         gzip_buffers     4 16k;  47         gzip_http_version 1.1;  48         gzip_comp_level 2;  49         gzip_types     text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss;  50  gzip_vary on;  51         gzip_proxied   expired no-cache no-store private auth;  52         gzip_disable   "MSIE [1-6]\.";  53 
 54         #limit_conn_zone $binary_remote_addr zone=perip:10m;  55         ##If enable limit_conn_zone,add "limit_conn perip 10;" to server section.  56 
 57  server_tokens off;  58  access_log off;  59 
 60 server  61  {  62         #listen [::]:80 default_server ipv6only=on;  63  server_name www.liangyadong.com liangyadong.com;  64  index index.html index.htm index.php;  65         root  /home/wwwroot/default;  66 
 67         if (-f $request_filename/index.html){  68             rewrite (.*) $1/index.html break;  69  }  70         
 71         if (-f $request_filename/index.php){  72             rewrite (.*) $1/index.php;  73  }  74         
 75         if (!-f $request_filename){  76             rewrite (.*) /index.php;  77  }  78 
 79         #error_page   404   /404.html;  80 
 81         # Deny access to PHP files in specific directory  82         #location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; }  83 
 84         include enable-php.conf;  85 
 86         location /nginx_status  87  {  88  stub_status on;  89  access_log off;  90  }  91 
 92         location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$  93  {  94  expires 30d;  95  }  96 
 97         location ~ .*\.(js|css)?$  98  {  99  expires 12h; 100  } 101 
102         location ~ /.well-known { 103  allow all; 104  } 105 
106         location ~ /\. 107  { 108  deny all; 109  } 110 
111         access_log  /home/wwwlogs/access.log; 112     
113     listen 443 ssl http2; # managed by Certbot 114     ssl_certificate /etc/letsencrypt/live/liangyadong.com/fullchain.pem; # managed by Certbot 115     ssl_certificate_key /etc/letsencrypt/live/liangyadong.com/privkey.pem; # managed by Certbot 116     include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot 117     ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot 118 
119 } 120 include vhost/*.conf; 121 
122 
123 server 124  { 125  if ($host = www.liangyadong.com) { 126  return 301 https://$host$request_uri; 127  } # managed by Certbot 128 
129 
130  if ($host = liangyadong.com) { 131  return 301 https://$host$request_uri; 132  } # managed by Certbot 133 
134         
135  listen 80 default_server; 136  server_name www.liangyadong.com liangyadong.com; 137  return 404; # managed by Certbot 138 
139 }}

其中,113~139中加了# managed by Certbot注釋的就是自動添加的內容。

 

4)通過步驟3)可以發現需要用到443端口,所以要在防火牆配置文件中進行配置443端口(/etc/sysconfig/iptables)。

 

5)重啟nginx服務,重啟防火牆設置。

$ service nginx restart 
$ service iptables restart

於是滿懷信心的打開自己的網站發現並不能訪問!

 

6)之所以到這里還不行,是因為阿里雲服務器有一個安全組規則管理。

然后添加安全組規則,將443端口添加進來就哦了~

 

7)驗證端口是否已成功開啟(在線檢測工具http://coolaf.com/tool/port

 

8)訪問網站驗證。

 

9)明明是https了,為什么不是安全鎖而是感嘆號呢?

原因在於:網站頁面上面引用了不是https的資源,最常見的就是引用的圖片、logo點擊事件設置的超鏈接等地方,友鏈不一定有影響(可以設置試試,我這里友鏈沒有影響)。

解決辦法:貌似沒什么快捷的方法,反正我是把硬編碼的地方把http改成了https,其中最多的就是圖片引用鏈接,因為文章本身不多,而且引用的圖片之前是通過后台管理上傳到服務器的,現在已全部修改為從微薄圖床引用,引用路徑都是https。(方法比較笨,有其他解決方案可以留言,拯救一下我這坨菜雞)

補充:如果用的是wordpress建站記得修改常規選項中的站點地址。(設置>常規)

 

啟用https后效果圖如下:

 友鏈沒有影響,主要影響是logo的超鏈接,以及網站首頁超鏈接。

 

10)添加定時任務(用於更新證書)

執行命令添加定時任務(修改命令相同)

$ crontab -e

添加內容:

0 0 1 * * /usr/bin/certbot renew --force-renewal        #每月1號凌晨強制更新Let's Encrypt證書
5 0 1 * * /usr/sbin/service nginx restart               #每月1號凌晨更新證書后重啟nginx

保存,設置crond服務為開機自啟動。(此時其實已經是自啟動的了,難道說默認就是?

查看、設置自啟動可查看該篇centos7設置服務為開機自啟動(以crond.serivce為)

另外,從centos7開始命令貌似已經變了。

任務 舊指令 新指令
使某服務自動啟動 chkconfig --level 3 httpd on systemctl enable httpd.service
使某服務不自動啟動 chkconfig --level 3 httpd off systemctl disable httpd.service
檢查服務狀態 service httpd status systemctl status httpd.service (服務詳細信息) systemctl is-active httpd.service (僅顯示是否 Active)
顯示所有已啟動的服務 chkconfig --list systemctl list-units --type=service
啟動某服務 service httpd start systemctl start httpd.service
停止某服務 service httpd stop systemctl stop httpd.service
重啟某服務 service httpd restart systemctl restart httpd.service

 

感謝:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM