HZSH Site

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

文章目錄

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標籤的內容

 

此時請先確認主機已經安裝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教學配置一個較大的置換空間。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

※.安裝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

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

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

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

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

新版建議額外安裝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

登入VestaCP管理員面板

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

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

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

點選”服務器”選項

點選齒輪圖示配置伺服器

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

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

8.啟用VestaCP自動更新

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

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

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

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

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

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

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

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

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

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

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

10.配置網站的SSL

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

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

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

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

若使用Apache格式的SSL證書,

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

※.安裝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

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

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

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

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

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

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

加上VestaCP面板欲使用的port

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

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

尋找

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

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

server_name    vestacp.example.com;

如果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生效

13.VestaCP面板對應網域DNS

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

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

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

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

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

 

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/

參考資料 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

Comentários
VestaCP安裝-免費VPS控制面板配置教學