文章目錄

VestaCP提供VPS使用者簡易的網頁主機環境,
透過簡單的指令建立LNAMP+電子郵件系統,
性能優異加上圖形化管理介面方便性高,
常被當作cPanel系統的替代方案。

但是實際安裝操作下,
VestaCP有諸多細節須留意,
才能順利配置站點到VestaCP系統運行。

2017/6/15 標示新版Ubuntu16.04系統安裝VestaCP可省略操作。

2016/10/1 更新Ubuntu14.04系統安裝VestaCP並啟動HTTP/2與php7。

2019/1/23 測試Ubuntu18.04系統安裝VestaCP並啟動HTTP/2。

VestaCP官網 https://vestacp.com

VestaCP支持以下作業系統

RHEL/CentOS 5,6,7
Debian 6,7,8
Ubuntu 12.04-16.04

請留意本教程以Ubuntu 14.04示範,不同系統安裝方式會有出入。

所有操作均以root管理員身分執行,非管理員帳戶請鍵入

sudo -i

輸入帳戶密碼成為root管理員。

如需掛載外部儲存裝置,請於終端機輸入

wget -O auto_disk.sh https://dl.dropboxusercontent.com/s/clbk14z92unpt92/auto_disk.sh && sudo bash auto_disk.sh

自動將外部儲存裝置掛載於預設的admin帳戶底下(如需掛載其他帳戶請自行修改auto_disk.sh內容)。

參考資料 http://www.bt.cn

1.請先更新Ubuntu套件清單

apt-get update

※.安裝通用套件庫(新版可略)

apt-get install -y software-properties-common

參考資料 http://www.ubuntubuzz.com

※.輸入php7與新版Nginx/Apache的PPA,並預先處理本地語言為UTF-8(新版可略)

apt-get install -y language-pack-en-base

LC_ALL=en_US.UTF-8 add-apt-repository -y ppa:ondrej/php

LC_ALL=en_US.UTF-8 add-apt-repository -y ppa:chris-lea/nginx-devel

LC_ALL=en_US.UTF-8 add-apt-repository -y ppa:ondrej/apache2

LC_ALL=en_US.UTF-8 add-apt-repository -y ppa:ondrej/mysql-5.6

apt-get update

若此時SSH終端出現

The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY xxxxxxxxxxxxxxxx 的錯誤訊息

請複製 NO_PUBKEY後方的文字輸入

apt-key adv --recv-keys --keyserver keyserver.ubuntu.com  xxxxxxxxxxxxxxxx

參考資料 https://www.digitalocean.com/community
http://www.ubuntumaniac.com/2016/05/install-nginx-1110-on-ubuntu-1604.html
http://forum.ubuntu.org.cn

2.升級Ubuntu系統套件

apt-get upgrade -y

3.安裝curl套件

apt-get install -y curl

4.下載VestaCP腳本並執行安裝

請進入VestaCP官網,點選Install,顯示Install標籤的內容

vestacpi1

 

vestacpi2

此時請先確認主機已經安裝curl,即可透過指令

curl -O http://vestacp.com/pub/vst-install.sh

下載安裝腳本到主機,

再往下捲動頁面到Advanced Install Settings

選擇站長所需的系統環境

本教程以Nginx前端+Apache後端配置,並關閉MAIL與DNS功能,
若使用者要使用其他配置須留意VestaCP可能會出現錯誤,
參考配置如下圖。

如果不需要信箱系統與DNS可以取消(選擇no),將能節省主機RAM的消耗

對於RAM不大的主機可以嘗試增加置換空間
配置教學參考 doub.io將主機預設的置換空間取消,
再參考 digitalocean教學配置一個較大的置換空間。

vestacpi4

而防火牆Firewall亦可選擇其他伺服器防禦模組,VestaCP的Firewall亦可取消(選擇no),
推薦使用雲鎖Cloudlock強化Linux伺服器安全。

雲鎖Cloudlock 安裝教學 http://www.sztio.com/1135

自訂系統選擇好後按下Generate Install Command

會出現bash開頭的指令即可貼上終端

vestacpi5

終端機顯示以下對話確認後執行VestaCP安裝

vestacpi6

如果無法順利安裝時請嘗試在bash指令加上 -f 強制安裝,

如果顯示需要手動修改主機名稱請開啟/etc/hostname與/etc/hosts修改名稱並重啟主機,

如果是作業系統更新鏡像問題,有些主機商會使用自家鏡像,

可以到主機的/etc/apt/sources.list

將原本http://鏡像主機網址/ubuntu/

全部取代成http://archive.ubuntu.com/ubuntu/並保存即可

大約10分鐘左右完成VestaCP安裝,

開啟瀏覽器開啟 https://伺服器的IP:8083

輸入帳號與密碼登入管理員介面

vestacpi7

※.安裝php7附加套件(請自行取捨需要的功能,新版可略)

apt-get install -y php7.0-common libapache2-mod-php7.0 php7.0-cgi php7.0-cli php7.0-phpdbg php7.0-fpm libphp7.0-embed php7.0-dev php7.0-curl php7.0-gd php7.0-imap php7.0-interbase php7.0-intl php7.0-ldap php7.0-mcrypt php7.0-readline php7.0-odbc php7.0-pgsql php7.0-pspell php7.0-recode php7.0-tidy php7.0-xmlrpc php7.0 php7.0-json php-all-dev php7.0-sybase php7.0-sqlite3 php7.0-mysql php7.0-opcache php7.0-bz2 php7.0-zip php7.0-soap php7.0-xml

參考資料 http://www.zhujiceping.com/16657.html

※.後端Apache停用php5,啟動php7(新版可略)

a2dismod php5
a2enmod php7.0

系統將會提示請重啟Apache

service apache2 restart

參考資料 https://forum.vestacp.com
https://www.mysterydata.com/(php版本切換參考)

5.安裝Memcached記憶體物件快取(内存对象缓存Object Cache)

apt-get install memcached -y
apt-get install php-memcache -y

安裝完成後請重啟Memcached與Apache

service memcached restart
service apache2 restart

透過以下指令檢查memcached是否執行

ps aux | grep memcached

若需要在WordPress啟用memcached快取,
請先下載Memcached Object Cache外掛 https://wordpress.org/plugins/memcached/

取得memcached.x.x.x.zip的壓縮檔請先解壓縮,
解壓縮檔中取出object-cache.php上傳至WordPress的/wp-content資料夾底下

即可進入WordPress後台的設定>WP Super Cache外掛>進階選項,
勾選”使用 object 快取來儲存快取檔案。 (實驗選項)”即可。

預設占用64MB記憶體,調整使用量請在終端鍵入

vi /etc/memcached.conf

將-m 64修改成-m 128或其他數值(單位 MB)即可保存並退出,
重啟後即可生效。

提高Memcached安全性避免攻擊,
請在memcached.conf檔案確認127.0.0.1是否有-1綁定,
並加上-U 0禁用UDP

-l 127.0.0.1
-U 0

針對WordPress相同資料表前綴的多個站點memcached快取問題,
請在wp-config.php檔案寫入如下(site1的字串各個站點都獨立一個)

define('WP_CACHE_KEY_SALT', 'site1');

參考資料 http://www.servermom.org https://serverfault.com
https://www.mxp.tw https://zhangge.net/5097.html
https://www.digitalocean.com/community/tutorials/

※.處理phpMyAdmin切換php版本後無法執行的問題(新版可略)

apt-get install -y php7.0-mbstring

安裝後請重啟系統

需留意phpMyAdmin的匯出資料庫功能在PHP7會出現500 error,
請編輯/usr/share/phpmyadmin/export.php

vi /usr/share/phpmyadmin/export.php

查看第864行,找到break 2;

if (! $export_plugin->exportStructure(
 $db, $table, $crlf, $err_url,
 'triggers', $export_type,
 $do_relation, $do_comments, $do_mime, $do_dates
)) {
 break 2;
}

修改成break;並保存。

參考資料 http://stackoverflow.com
http://superuser.com/a/1111548

6.修復VestaCP的資料庫與phpMyAdmin串接問題

由於目前這個VestaCP版本會出現phpMyAdmin無法連接資料庫的問題
(測試過CentOS7系統並不會有這個問題,CentOS7系統可以跳過本節教學)

請先執行以下指令(由cloudwp提供的教學)

cd /usr/share/doc/phpmyadmin/examples
gunzip config.sample.inc.php.gz
cp ./config.sample.inc.php /etc/phpmyadmin/config.inc.php

vestacpi8

或透過WinSCP以SFTP連接主機(按這裡前往阿榮福利味下載程式),

將/usr/share/doc/phpmyadmin/examples底下的

config.sample.inc.php複製到本地電腦改名為config.inc.php

vestacpi9

再上傳到/etc/phpmyadmin/覆蓋原始檔案即可

vestacpi10

新版建議額外安裝php-zip套件,讓phpmyadmin可以解壓縮zip打包的資料庫,請於終端機鍵入

apt-get install php-zip -y

安裝完成後請重新載入系統即可。

針對Ubuntu18.04版本運行phpmyadmin會遇到
./libraries/sql.lib.php#613
./libraries/plugin_interface.lib.php#551
的錯誤訊息,請在終端輸入

vi /usr/share/phpmyadmin/libraries/sql.lib.php

將613行 (count($analyzed_sql_results[‘select_expr’] == 1)代碼修改為

((count($analyzed_sql_results['select_expr']) == 1)

鍵入:w保存,:q退出,再次輸入

vi /usr/share/phpmyadmin/libraries/plugin_interface.lib.php

將551行 if ($options != null && count($options) > 0) { 代碼修改為

if ($options != null ) {

鍵入:w保存,:q退出,完成後請重新載入系統即可。

參考資料 https://devanswers.co

※.安裝繁體中文語言包(新版可略)

(目前新版0.9.8已經解決切換中文500錯誤的問題,可以跳過本節教學)

接下來安裝繁體中文的語言包到VestaCP,請在終端輸入

wget https://raw.githubusercontent.com/serghey-rodin/vesta/master/web/inc/i18n/tw.php -O /usr/local/vesta/web/inc/i18n/tw.php

vestacpi11

登入VestaCP管理員面板

vestacpi12

先點選管理員帳戶更改語言

vestacpi13

Language選擇tw並保存,即可出現繁體中文操作介面

vestacpi14

7.修改主機時區與預設語言

點選”服務器”選項

vestacpi15

點選齒輪圖示配置伺服器

vestacpi16

更改伺服器預設時區與預設語言

vestacpi17

配置伺服器的備份數量與備份位置(提供FTP/SFTP遠程備份的功能)

vestacpi18

8.啟用VestaCP自動更新

為了降低VestaCP未及時更新造成伺服器空窗問題,請點選”更新”

vestacpi19

啟用自動更新,讓VestaCP自動升級到最新的系統

vestacpi20

但如果擔心升級會影響站點穩定性請停用自動更新改成手動操作。

9.設定不同方案規格並建立子帳戶

VestaCP面板提供多帳戶管理的服務(類似WHM),

點選”套件”,在某個方案按下”編輯”即可調整不同方案的規格

包括網頁主機空間、流量、資料庫數量、備份量,以及是否開放SSH連線

vestacpi21

配置好套件方案的規格後,即可新增VestaCP的子帳戶,

請點選”使用者”並按下增加的圖示即可建立

一般建議給子帳戶SSH存取設定為nologin,

或設定成rssh,提供比較安全的SFTP連接

vestacpi22

10.配置網站的SSL

(本節的SSL教學為手動安裝已取得的域名SSL憑證,如果沒有SSL憑證請跳第16節的教學)

站點SSL已經是網站基本配備,

VestaCP網站安裝需要安裝SSL時點選”網頁”,新增或編輯網域對應配置

vestacpi23

勾選SSL功能,選擇好SSL家目錄後分別貼上證書代碼

vestacpi24

若使用Apache格式的SSL證書,

請務必補齊SSL中級憑證避免斷裂問題,完成後儲存即可

vestacpi25

※.安裝VestaCP Let’s Encrypt自動更新模組(新版可略)

(本節透過VestaCP Let’s Encrypt自動更新模組取得站點SSL憑證)

下載git到主機

cd /usr/local
git clone https://github.com/certbot/certbot.git
git clone https://github.com/interbrite/letsencrypt-vesta.git

建立webroot資料夾

mkdir -p /etc/letsencrypt/webroot

連接/usr/local/bin/便於控制帳戶

ln -s /usr/local/certbot/certbot-auto /usr/local/bin/certbot-auto
ln -s /usr/local/letsencrypt-vesta/letsencrypt-vesta /usr/local/bin/letsencrypt-vesta

由於後端為Apache,輸入

ln -s /usr/local/letsencrypt-vesta/letsencrypt.conf /etc/apache2/conf.d/letsencrypt.conf

重啟Apache

service apache2 restart

檢查自動更新模組是否啟用

which at atd atq atrm
service atd status

若顯示未啟用或錯誤,請請鍵入

apt-get install at

並啟動at

service atd start

接下來即可配置Let’s Encrypt到站點,
請留意站點的使用者帳戶名稱與域名是否正確,
僅支持頂級域名與二級域名,
使用二級域名的站點務必刪除VestaCP產生www開頭的三級域名,
並確認域名A紀錄已經對應到主機IP後,
輸入規則為

letsencrypt-vesta -a 60 USERNAME DOMAIN

其中-a 60為60天自動renew
USERNAME為帳戶名稱
DOMAIN是要簽發Let’s Encrypt證書的域名,
完成Let’s Encrypt配置。

VestaCP Let’s Encrypt模組 GitHub https://github.com/interbrite/letsencrypt-vesta

11.配置VestaCP面板的SSL

網頁的SSL配置可以透過VestaCP面板進行處理,

但是VestaCP面板本身的SSL需要上傳到

/usr/local/vesta/ssl/底下

務必使用Nginx格式的SSL憑證,

若使用Apache格式SSL憑證時,

請將中級憑證加入網域憑證中串接再上傳到伺服器上覆蓋

certificate.crt
certificate.key

vestacpi26

確認VestaCP面板可透過https訪問表示SSL已經生效

新版請從VestaCP面板>伺服器>設定>Vesta SSL配置即可。

參考資料 https://becoder.org/vestacp-lets-encrypt/

12.修改VestaCP面板的連接埠並禁止IP直接訪問

針對VestaCP面板的安全性來說,可以修改port提高安全性

請點選”防火牆”,按下/VESTA編輯

vestacpi27

加上VestaCP面板欲使用的port

vestacpi28

再編輯/usr/local/vesta/nginx/conf/nginx.conf檔案

vi /usr/local/vesta/nginx/conf/nginx.conf

vestacpi29

尋找

 server {
 listen 8083;
 server_name _;
 root /usr/local/vesta/web;
 charset utf-8;

將8083修改成所需的port,
並將server_name    _;修改成VestaCP後台域名,例如

server_name    vestacp.example.com;

vestacpi30

如果VestaCP控制面板域名已經完成IP解析,請在server{

}下方加上

server {
 listen 8083 default_server;
 server_name _;
 return 403; 
 ssl on;
 ssl_certificate /usr/local/vesta/ssl/certificate.crt;
 ssl_certificate_key /usr/local/vesta/ssl/certificate.key;
 ssl_session_cache shared:SSL:10m;
 ssl_session_timeout 10m;
}

請務必將8083的部分修改成所需的port,
禁止直接透過IP訪問VestaCP面板。

重新啟動伺服器讓VestaCP面板新port生效

vestacpi31

13.VestaCP面板對應網域DNS

再到網域DNS配置指向伺服器IP完成VestaCP建置

vestacpi32

※.處理VestaCP子帳戶無法串接資料庫問題(新版可略)

(目前新版0.9.8已經解決切換中文500錯誤的問題,可以跳過本節教學)

建議管理員可以在資料庫選項新增一個空白資料庫,

主要防止子帳戶無法對資料庫進行連接的問題。

vestacpi33

 

VestaCP面板配置到此完成,

其他的附加應用可以訪問VestaCP論壇 https://forum.vestacp.com/

比方說cPanel主機常見的一鍵安裝功能,

VestaCP面板同樣有腳本可以使用,請參考以下連結

https://forum.vestacp.com/viewtopic.php?f=19&t=8523

※.解決VestaCP SSL的Weak DH安全性問題(新版可略)

openssl dhparam -out /etc/nginx/dhparams.pem 2048

key生成時間較長,可先用WinSCP進行以下操作

請開啟/etc/nginx/nginx.conf檔案修改內容

vi /etc/nginx/nginx.conf

請在ssl_ciphers後方加上

ssl_dhparam /etc/nginx/dhparams.pem;

如果站點有HSTS的需求,請一併加上

add_header Strict-Transport-Security "max-age=15552000";

或

add_header Strict-Transport-Security "max-age=15552000; includeSubdomains";

配置完成後請重新載入Nginx設定

nginx -s reload

須留意HSTS不能設定在後端Apache的.htaccess會出現錯誤。

參考資料 https://becoder.org/vestacp-weakdh/

14.禁用部分具有風險的php函式

請開啟/etc/php/7.0/apache2/php.ini

vi /etc/php/7.0/apache2/php.ini

在disable_functions =後方加上

apache_child_terminate, apache_setenv, define_syslog_variables, escapeshellarg, escapeshellcmd, eval, exec, fp, fput, ftp_connect, ftp_exec, ftp_get, ftp_login, ftp_nb_fput, ftp_put, ftp_raw, ftp_rawlist, highlight_file, ini_alter, ini_get_all, ini_restore, inject_code, mysql_pconnect, openlog, passthru, phpAds_remoteInfo, phpAds_XmlRpc, phpAds_xmlrpcDecode, phpAds_xmlrpcEncode, popen, posix_getpwuid, posix_kill, posix_mkfifo, posix_setpgid, posix_setsid, posix_setuid, posix_setuid, posix_uname, proc_close, proc_get_status, proc_nice, proc_open, proc_terminate, shell_exec, syslog, system, xmlrpc_entity_decode,

重啟Apache

service apache2 restart

參考資料 https://vestacp.com/docs/
https://becoder.org/secure-vestacp-php-phpmyadmin/

15.啟動前端Nginx的HTTP/2功能與CROS

請開啟/home/(vesta_user)/conf/web/snginx.conf
其中(vesta_user)請替換成使用者名稱,
如果VestaCP尚無站點啟用SSL將無法進行以下操作。

vi /home/(vesta_user)/conf/web/snginx.conf

請將

server {
listen xx.xx.xx.xx:443;

}

修改成

server {
 listen xx.xx.xx.xx:443 http2;
...
}

再將

location / {
proxy_pass https://%ip%:%web_ssl_port%;
location ~* ^.+\.(%proxy_extentions%)$ {
root %sdocroot%;
access_log /var/log/%web_system%/domains/%domain%.log combined;
access_log /var/log/%web_system%/domains/%domain%.bytes bytes;
expires max;
try_files $uri @fallback;
}
}

修改成

 location / {
 proxy_pass https://%ip%:%web_ssl_port%;
 location ~* ^.+\.(%proxy_extentions%)$ {
 root %sdocroot%;
 access_log /var/log/%web_system%/domains/%domain%.log combined;
 access_log /var/log/%web_system%/domains/%domain%.bytes bytes;
 expires max;
 try_files $uri @fallback;
  add_header Access-Control-Allow-Origin *;
 }
 }

保存並重啟Nginx

nginx -s reload

接下來編輯預設模板自動將未來新增的站點啟動HTTP/2與CROS
請開啟/usr/local/vesta/data/templates/web/nginx/default.stpl

vi /usr/local/vesta/data/templates/web/nginx/default.stpl

請將

server {
listen %ip%:%proxy_ssl_port%;
server_name %domain_idn% %alias_idn%;
ssl on;

修改成

server {
 listen %ip%:%proxy_ssl_port% http2;
 server_name %domain_idn% %alias_idn%;
 ssl on;

如果其他站點Nginx選擇不同模式,請一併修改
/usr/local/vesta/data/templates/web/nginx/hosting.stpl
/usr/local/vesta/data/templates/web/nginx/caching.stpl

參考資料 https://forum.vestacp.com
https://forum.vestacp.com https://www.mf8.biz

※.解決VestaCP防火牆CIDR輸入格式錯誤問題(新版可略)

如果站點有使用CloudFlare可根據
https://www.cloudflare.com/ips
建立封鎖規則,但這個目前VestaCP新版0.9.8配置CIDR會回報格式錯誤
請直接開啟/usr/local/vesta/data/firewall/rules.conf編輯VestaCP防火牆規則

vi /usr/local/vesta/data/firewall/rules.conf

內容範例如下

RULE='11' ACTION='DROP' PROTOCOL='UDP' PORT='53' IP='0.0.0.0/0' COMMENT='DNS' SUSPENDED='no' TIME='21:56:40' DATE='2016-09-28'

RULE='12' ACTION='ACCEPT' PROTOCOL='TCP' PORT='80,443,8083' IP='103.21.244.0/22' COMMENT='CloudFlare' SUSPENDED='no' TIME='17:15:41' DATE='2014-09-16'

其中RULE=’##’為規則編號
ACTION=’ACCEPT/DROP’規則控制允許連線或封鎖
PROTOCOL=’ICMP/TCP/UDP’規則控制通訊協定
PORT=’##,###,####’規則控制連接埠,以,隔開
COMMENT=’NAME’為規則的名稱

參考資料 https://forum.vestacp.com

16.處理phpMyAdmin無法匯入檔案較大的資料庫

請開啟/etc/php/7.0/apache2/php.ini

vi /etc/php/7.0/apache2/php.ini

分別編輯 max_execution_time = 60 腳本超時時間
max_input_time = 60
memory_limit = 256M 腳本占用記憶體上限
post_max_size = 10M POST提交上限
upload_max_filesize = 10M 檔案上傳大小上限
須留意數值大小memory_limit > post_max_size > upload_max_filesize

接下來請開啟/etc/mysql/my.cnf

vi /etc/mysql/my.cnf

請修改max_allowed_packet = 1M的大小
(例如 max_allowed_packet = 10M)

設定完成後請重啟主機

reboot

參考資料 http://actionpc.pixnet.net/blog

http://jjdai.zhupiter.com

17.配置免費WAF模組mod security

安裝mod_security

apt install -y libapache2-mod-security2

使用預設的配置文件

cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf

編輯mod_security配置

vi /etc/modsecurity/modsecurity.conf

請將SecRuleEngine DetectionOnly

修改成

SecRuleEngine On

並儲存。

接下來啟動CRS規則,編輯

vi /etc/apache2/mods-enabled/security2.conf

請在</IfModule>前方加上

IncludeOptional /usr/share/modsecurity-crs/*.conf
IncludeOptional /usr/share/modsecurity-crs/activated_rules/*.conf

並儲存。

開始匯入需要的CRS預設提供的規則。

ln -s /usr/share/modsecurity-crs/base_rules/modsecurity_crs_23_request_limits.conf /usr/share/modsecurity-crs/activated_rules/modsecurity_crs_23_request_limits.conf
ln -s /usr/share/modsecurity-crs/base_rules/modsecurity_crs_30_http_policy.conf /usr/share/modsecurity-crs/activated_rules/modsecurity_crs_30_http_policy.conf
ln -s /usr/share/modsecurity-crs/base_rules/modsecurity_crs_35_bad_robots.conf /usr/share/modsecurity-crs/activated_rules/modsecurity_crs_35_bad_robots.conf
ln -s /usr/share/modsecurity-crs/base_rules/modsecurity_35_bad_robots.data /usr/share/modsecurity-crs/activated_rules/modsecurity_35_bad_robots.data
ln -s /usr/share/modsecurity-crs/base_rules/modsecurity_35_scanners.data /usr/share/modsecurity-crs/activated_rules/modsecurity_35_scanners.data
ln -s /usr/share/modsecurity-crs/base_rules/modsecurity_crs_45_trojans.conf /usr/share/modsecurity-crs/activated_rules/modsecurity_crs_45_trojans.conf
ln -s /usr/share/modsecurity-crs/base_rules/modsecurity_crs_47_common_exceptions.conf /usr/share/modsecurity-crs/activated_rules/modsecurity_crs_47_common_exceptions.conf

除了CRS預設規則外,也能匯入ComodoWAF的防禦規則

Comodo WAF官網 https://waf.comodo.com

免費註冊ComodoWAF後,請下載取得以下規則,
22_PHP_PHPGen.conf
26_Apps_Joomla.conf
28_Apps_WordPress.conf
29_Apps_WPPlugin.conf
31_Apps_Drupal.conf
並添加到/usr/share/modsecurity-crs/activated_rules/即可。

啟動mod_security模組
a2enmod security2

完成後請重新載入Apache

service apache2 restart

需留意mod_security模組啟動後,
phpMyAdmin匯入功能無法直接匯入.sql格式檔案,
請先將檔案壓縮成檔名.sql.zip格式的壓縮檔再上傳即可。

查看mod_security攔截日誌

cat /var/log/apache2/modsec_audit.log

如果要停用mod_security模組請輸入

a2dismod security2

並重新載入Apache即可

如果是運行WordPressCMS站點,
可以額外安裝WAF外掛(NinjaFirewall (WP Edition))進行防禦

NinjaFirewall (WP Edition)外掛頁面 https://wordpress.org/plugins/ninjafirewall/

ninfirewall

參考資料 http://blog.topspeedsnail.com
https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual

※.修正REMOTE_ADDR顯示訪客ip(負載平衡)

Apache使用負載平衡節點後,
REMOTE_ADDR將顯示為節點ip而非訪客ip,
修改mod_rpaf仍無法獲取ip時可以改用mod_remoteip設定。

請於終端輸入

vi /etc/apache2/mods-available/remoteip.conf

創建新檔,內容寫入

<IfModule mod_remoteip.c>
RemoteIPHeader X-Real-IP
RemoteIPInternalProxy 127.0.0.1
RemoteIPInternalProxy xxx.xxx.8.1 // 主機ip
</IfModule>

鍵入:w保存:q退出,接著停用mod_rpaf

a2dismod rpaf

啟用mod_remoteip並重起Apache

a2enmod remoteip
service apache2 restart

透過php代碼獲取REMOTE_ADDR判斷ip是否正確

<?php echo $_SERVER['REMOTE_ADDR']; ?>

確認無誤後移除mod_rpaf

apt-get remove libapache2-mod-rpaf

參考資料 https://forum.vestacp.com https://gist.github.com

18.解決PHP mail無法寄信

請於終端機鍵入

apt-get install sendmail -y

WordPress可透過WP Mail SMTP外掛測試PHP mail(),
若仍然無法寄送請檢查防火牆是否已阻擋SMTP端口。

須留意如果啟用寄信程式後,主機名若未完成解析時會持續寄送解析錯誤信件,
內容像是sudo: unable to resolve host vps.example.top
請直接設定主機hostname解析到本地即可,請在終端機鍵入

vi /etc/hosts

按i輸入一行

127.0.0.1 localhost localhost.localdomain vps.example.top

按Esc停止輸入,鍵入:w寫入檔案,鍵入:q退出檔案即可

參考資料 https://stackoverflow.com http://www.flogiston.net

2022/5/25 更新

部分VPS配置會自動覆蓋/etc/hosts紀錄導致重啟後失效,請在終端機鍵入

vi /etc/cloud/templates/hosts.debian.tmpl

接著同樣按i輸入原本應寫入/etc/hosts的紀錄即可

19.設定SSH金鑰認證

這項操作請分別在root帳戶與admin帳戶(與其他子帳戶)的終端介面取得金鑰

建立帳戶的/.ssh隱藏資料夾並給予權限

mkdir -p ~/.ssh
chmod 700 ~/.ssh

產生金鑰

ssh-keygen

接下來對話均輸入Enter預設即可
金鑰產生後將id_rsa.pub輸出成authorized_keys檔案

cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys

下載帳戶/.ssh/id_rsa檔案,
將檔案透過PuTTYgen讀取轉存成.ppk私密金鑰(private key)

PuTTYgen 下載官網 http://www.chiark.greenend.org.uk

接著請將SSH連接配置.ppk驗證確定可以訪問。

當所有帳戶均取得金鑰後,請以root帳戶身分開啟/etc/ssh/sshd_config

vi /etc/ssh/sshd_config

將PasswordAuthentication設定為no
PubkeyAuthentication啟用並設定為yes

PasswordAuthentication no
PubkeyAuthentication yes

保存檔案後請輸入reboot重啟主機使設定生效。

※.禁用主機預設的root帳戶(新版禁用)

請透過VestaCP的admin管理員帳戶與伺服器SSH連線,
鍵入sudo -i後輸入密碼以管理員身分操作

請開啟/etc/ssh/sshd_config

vi /etc/ssh/sshd_config

按下i進入編輯模式
將PermitRootLogin yes修改成PermitRootLogin no
按下鍵盤ESC退出編輯模式
輸入:w(含w左邊的半形冒號)保存sshd_config
輸入:q退出vi編輯器
接下來請輸入reboot重啟主機使設定生效。

參考資料 http://www.vixual.net/blog/archives/234
https://dotblogs.com.tw/may05005/2015/12/23/134838

20.重置VestaCP面板

VestaCP面板若出現無法訪問的情形,可以透過重置的方式解決問題

請在終端操作

apt-get install vesta-nginx --reinstall
apt-get install vesta-php --reinstall

參考資料 https://forum.vestacp.com

21.升級VestaCP面板

如果用戶關閉VestaCP面板自動更新可以透過終端手動升級

請在終端操作

v-update-sys-vesta-all

參考資料 https://forum.vestacp.com

22.移除VestaCP面板

如果需要移除VestaCP面板

請在終端操作

service vesta stop

停止VestaCP運行

接下來執行移除指令

針對RHEL/CentOS 5,6,7系統

請執行
yum remove vesta*
rm -f /etc/yum.repos.d/vesta.repo

針對Debian 6,7,8/Ubuntu 12.04-15.10系統

請執行
apt-get remove vesta*
rm -f /etc/apt/sources.list.d/vesta.list

最後再刪除檔案目錄及corn即可

rm-rf /usr/local/vesta

23.解決inode滿載問題

請先開啟php.ini,在終端輸入

vi /etc/php/7.0/apache2/php.ini

將session.gc_probability數值由0修改為1後保存並重啟Apache。

參考資料 https://github.com

24.修改phpMyAdmin預設路徑

請先開啟phpmyadmin.conf,在終端輸入

vi /etc/apache2/conf.d/phpmyadmin.conf

找到

Alias /phpmyadmin /usr/share/phpmyadmin

將Alias後方的/phpmyadmin改成新的路徑
(自訂,例如 Alias /phpmyadmin_new )保存後退出
重起apache

service apache2 restart

接著在終端輸入

vi /usr/local/vesta/web/templates/admin/list_db.html

修改admin帳戶vestacp面板的phpmyadmin路徑,找到

if ($data[$key]['TYPE'] == 'mysql') $db_admin_link = "http://".$http_host."/phpmyadmin/";

將/phpmyadmin/修改成新的路徑(例如 /phpmyadmin_new/)

保存後退出,如果要修改user帳戶請在終端輸入

vi /usr/local/vesta/web/templates/user/list_db.html

操作方式同admin帳戶。

參考資料 https://forum.vestacp.com

25.LAMP模式下重啟後Apache無法執行問題

重啟主機可能發生VestaCP的Nginx占用Apache端口,
因為Apache沒有使用Nginx當作前端導致無法正常運行
在終端介面輸入

service nginx stop
service apache2 start

若此時Apache可以正常運行,請輸入

apt-get remove nginx

移除多餘的nginx程序

參考資料 https://www.digitalocean.com/community

26.LAMP模式下隱藏Apache版本資訊

有些站長會希望隱藏Apache資訊,可以在終端介面輸入

vi /etc/apache2/apache2.conf

在apache2.conf新增如下

ServerTokens Prod
ServerSignature Off

鍵入:w寫入與:q退出,再鍵入

service apache2 restart

重啟Apache即可。

參考資料 https://www.tecmint.com

27.Set-Cookie行為增加SameSite

根據綠界金流說明,
Chrome瀏覽器從84版開始將未設置Set-Cookie的SameSite屬性強制指定Lax導致結帳資訊異常,
官方提供的解決方法包括啟用https與針對所有cookies加上SameSite=None屬性。

先啟用mod_headers模組並重啟Apache,在終端輸入

a2enmod header
service apache2 restart

接著在.htaccess檔案寫入以下內容即可。

<IfModule mod_headers.c>
<If "%{HTTP_USER_AGENT} !~ /(iPhone; CPU iPhone OS 1[0-2]|iPad; CPU OS 1[0-2]|iPod touch; CPU iPhone OS 1[0-2]|Macintosh; Intel Mac OS X.*Version\x2F1[0-2].*Safari|Macintosh;.*Mac OS X 10_14.* AppleWebKit.*Version\x2F1[0-3].*Safari)/i"> 
Header edit Set-Cookie ^(.*)$ "$1; SameSite=None; Secure"
</If>
</IfModule>

另外測試aaPanel(寶塔面板)的寫法有所不同,
Header內容須更改成

Header always edit Set-Cookie ^(.*)$ "$1; SameSite=None; Secure"

如果是LiteSpeed網頁主機的話整段改用

<IfModule LiteSpeed>
<If "%{HTTP_USER_AGENT} !~ /(iPhone; CPU iPhone OS 1[0-2]|iPad; CPU OS 1[0-2]|iPod touch; CPU iPhone OS 1[0-2]|Macintosh; Intel Mac OS X.*Version\x2F1[0-2].*Safari|Macintosh;.*Mac OS X 10_14.* AppleWebKit.*Version\x2F1[0-3].*Safari)/i">
ForceSecureCookie secure same_site_none
</If>
</IfModule>

參考資料 https://devarticles.in
https://community.shopify.com
https://www.ecpay.com.tw/CascadeFAQ/CascadeFAQ_Qa?nID=3914

VestaCP安裝-免費VPS控制面板配置教學
標籤: