文章目录

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控制面板配置教学
标签: