- 1.请先更新Ubuntu套件清单
- 2.升级Ubuntu系统套件
- 3.安装curl套件
- 4.下载VestaCP脚本并执行安装
- 5.安装Memcached内存物件快取(内存对象缓存Object Cache)
- 6.修复VestaCP的数据库与phpMyAdmin串接问题
- 7.修改主机时区与默认语言
- 8.启用VestaCP自动更新
- 9.设定不同方案规格并建立子帐户
- 10.配置网站的SSL
- 11.配置VestaCP面板的SSL
- 12.修改VestaCP面板的连接埠并禁止IP直接访问
- 13.VestaCP面板对应网域DNS
- 14.禁用部分具有风险的php函式
- 15.启动前端Nginx的HTTP/2功能与CROS
- 16.处理phpMyAdmin无法汇入档案较大的数据库
- 17.配置免费WAF模组mod security
- 18.解决PHP mail无法寄信
- 19.设定SSH金钥认证
- 20.重置VestaCP面板
- 21.升级VestaCP面板
- 22.移除VestaCP面板
- 23.解决inode满载问题
- 24.修改phpMyAdmin默认路径
- 25.LAMP模式下重启后Apache无法执行问题
- 26.LAMP模式下隐藏Apache版本资讯
- 27.Set-Cookie行为增加SameSite
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退出,完成后请重新加载系统即可。
※.安装繁体中文语言包(新版可略)
(目前新版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
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即可。
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