Nginx+SSL

最近歐肉摳(Oracle)有免費的VPS可以申請,所以就申請完來練習一下操作,之前就想碰碰看Nginx所以就放個服務來測試看看。
然後搭配Let's Encryptclient — certbot 來幫忙放SSL。

弄台機器出來

首先就先申請免費VPS,這裡就不教怎麼申請了。

記得打開所有或要用的port,預設只開22port一開始忘記害我想說怎麼都用不好。
現在能申請公用IP記得用一下。
然後SSH連線系統為ubuntu名稱就用ubuntu名稱連線並且附帶SSH key

下載Nginx

1
2
3
4
5
6
7
$ sudo apt install nginx# start nginx
# start nginx
$ sudo nginx
# -s to using parameter
$ sudo nginx -s stop # stop nginx
$ sudo nginx -t #check nginx conf
$ sudo nginx -s reload # reload nginx configurations

啟動之後你就能在127.0.0.1就可以看到自己的Nginx頁面
但是要配置自己的服務,還要另外寫。
配置的文件在/etc/nginx/nginx.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
user root #使用者盡量權限高一點;
worker_processes auto; # Nginx的執行緒數量看你CPU數量
events {
# 允許同一時間連線總數量
worker_connections 768;
}
http{
.....很多預設檔
#自行新增server區塊記得要在http裡面
server{
#監聽80port
listen 80;
#放你的Domain or ip
server_name localhost;
location / {
#放你html的位置
root /var/www/html/MapMask/dist;
#假如指定到本地port ex:3000port 要用porxy_pass 127.0.0.1:3000
#看是html php htm等等
index index.html;
try_files $uri $uri/ /index.html;
}
#error page 500 404自己設定
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
}

配置完之後
sudo nginx -t看有沒有出問題。
沒有的話sudo nginx -s reload重新更新nginx,再次打開網頁看看吧。

配置SSL

我是用免費三個月的Let's Encrypt

1
2
wget https://dl.eff.org/certbot
sudo cerbot certonly --webroot -w /var/www/html/ -d your.domain

然後就會一連串先叫你輸入email、看同意條款等等,成功之後有以下畫面。

而憑證放的位置為/etc/letsencrypt/live/your.domain/fullchain.pem,裡面會放privkey、fullchain等等。
然後她會幫你在你的Nginx加上這些。

然後要改設定像是ssl_protocolsssl_session_timeout等等,再到/etc/letsencrypt/options-ssl-nginx.conf修改。
確認之後就一樣nginx -t確認然後在nginx -s reload,在打開自己網頁就能看到鎖頭ㄌ。

重新導向Https

有些Cerbot套件不同,會幫你自己做完導向或是你沒確認到選項,會讓你的網頁能夠HTTP HTTPS共存,也可能你有需要這樣需求,但是我想讓我的網站自動導向到HTTPS。
Nginx的配置會和你SSL配置寫在一起變成你的80port跟443port放一起,這時候你的HTTP跟HTTPS就共存了,所以我們要分開讓80port重新導向。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
server {
listen 80 ;
server_name your.domain;
location / {
root /var/www/html/;
index index.html;
try_files $uri $uri/ /index.html;

}
#重新導向
return 301 https://your.domain;
}
#443Cerbot所幫你配置的
server {
listen 443 ssl;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
ssl on;
ssl_certificate /etc/letsencrypt/live/your.domain/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your.domain/privkey.pem;
server_name your.domain;
location / {
root /var/www/html/;
index index.html;
try_files $uri $uri/ /index.html;

}
}

就完成啦~~一樣要重新reload Nginx。
測試你的SSL等級