Synology 的 Web Station 本身就有設置 Virtual Host 的功能。
但可惜他 UI 介面缺少了加入自定義參數的功能,功能只做了一半。
後端伺服器如果採用 Apache,可以使用 .htaccess 來做處理。
可是 Nginx 因為效能上的考量不給這樣子做,得採自行建立 Virtual Host 的方式才行。
Nginx 主要的設定檔路徑為:
/etc/nginx/nginx.conf
Web Station 會把所有 Virtual Host 資料也寫在這個檔案裡面。
避免之後加了其他 Host 而覆寫了這個檔案,就把 Virtual Host 的資訊拆開來寫。
參照 /etc/nginx/nginx.conf 的內容,最下面有幾個 include 可以使用。
include conf.d/http.*.conf;
include app.d/server.*.conf;
include sites-enabled/*;
* sites-enabled 下面可以任意命名,放這裡比較方便。
一開始搜尋一些網路範例,不是得到 502,要不就 redirect 到 default server 去。
直接在 UI 畫面上見一個來抄比較快了。
# 這裡是做 http 強制轉 https。
server {
listen 80;
listen [::]:80;
server_name your.virtual.host;
return 301 https://your.virtual.host$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name your.virtual.host;
location ^~ /.well-known/acme-challenge {
root /var/lib/letsencrypt;
default_type text/plain;
}
root "/your/virtual/host/public";
index index.html index.htm index.cgi index.php index.php5 ;
error_page 400 401 402 403 404 405 406 407 408 500 501 502 503 504 505 @error_page;
location @error_page {
root /var/packages/WebStation/target/error_page;
rewrite ^ /$status.html break;
}
location ^~ /_webstation_/ {
alias /var/packages/WebStation/target/error_page/;
}
# php 會不會動就看這裡了
location ~* \.(php[345]?|phtml)$ {
fastcgi_pass unix:/run/php-fpm/php-9f1e642a-0d20-4664-8934-c51d34f609de.sock;
fastcgi_param HOST "your.virtual.host";
include fastcgi.conf;
}
# 這一行要記得加入才能 redirect 所有的 uri
location / {
try_files $uri $uri/ /index.php?$query_string;
}
}
Web Station 建立 Virtual Host 的時候,如果伺服器有提供 HTTPS 的連線,並且在伺服器裡面已經設置好憑證的話,會在設定裡面多了 ssl_ 相關的設定。刪除 Virtual Host 的話憑證的目錄也會一起刪除,如果設定檔是複製過來的,就要注意憑證路徑是否被刪掉了。
我這邊是使用憑證是單檔對應多伺服器,所以直接把 ssl_ 的設定通通拿掉,採用預設的 ssl_ 內容即可。
設置完成後可以先試試看 conf 檔案有沒有問題:
sudo nginx -t
沒問題的話讓就載入 conf 擋了:
sudo nginx -s reload
以上