根据学到的 Linux 操作系统知识、以及从我菜鸟的角度来看,梳理了一下:在安装 LNMP 环境搭建 WordPress 之前,一个新建的 VPS 服务器该做好哪些基本的配置?
本文环境:
# 服务器: Linode
# 发行版: CentOS 7
# 系统环境:LNMP (Linux + Nginx + Mysql + PHP)
# 系统环境一键安装包:https://lnmp.org/install.html
一、配置服务器
登陆终端,开始下面的基本设置:
1.更新系统:
yum -y update
2.设置系统自动更新:
# 安装 dnf-automatic 和 Cockpit
yum -y install dnf-automatic cockpit
# 修改 dnf-automatic 配置文件
vim /etc/dnf/automatic.conf
apply_updates = yes # 将 no 改为 yes
# 启用 dnf-automatic
systemctl enable --now dnf-automatic.timer
systemctl start --now dnf-automatic.timer
# 启用 cockpit.socket
systemctl enable --now cockpit.socket
systemctl start cockpit.socket
浏览器访问 IP:9090
即可网页管理系统!
项目wiki:https://github.com/cockpit-project/cockpit/wiki/Proxying-Cockpit-over-nginx
步骤:
- 先把域名解析好;
- 接着 LNMP 环境用一键脚本装好后:直接
lnmp vhost add
,顺便申请let's encrypted
证书; - 最后修改虚拟主机配置文件,保留 ssl 部分,结合文档,最终如下所示即可。
server {
listen 80;
listen 443 ssl;
server_name cockpit.你的域名.xxx;
location / {
# Required to proxy the connection to Cockpit
proxy_pass https://127.0.0.1:9090;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
# Required for web sockets to function
proxy_http_version 1.1;
proxy_buffering off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# Pass ETag header from Cockpit to clients.
# See: https://github.com/cockpit-project/cockpit/issues/5239
gzip off;
}
# 把这段 ssl 加进来就可以了
ssl_certificate /usr/local/nginx/conf/ssl/cockpit.你的域名.xxx/fullchain.cer;
ssl_certificate_key /usr/local/nginx/conf/ssl/cockpit.你的域名.xxx/cockpit.你的域名.xxx.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers "TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_dhparam /usr/local/nginx/conf/ssl/dhparam.pem;
}
3.修改主机名:
# 把 sgq 替换为你想要的名字
hostnamectl set-hostname sgq
4.设定系统时区/时间:
# 把现有的时区都列出来:
timedatectl list-timezones
# 比如找到 Asia/Shanghai,设置为中国时区:
timedatectl set-timezone 'Asia/Shanghai'
5.关闭 SElinux:
# 临时关闭,执行命令:setenforce 0
# 这里直接修改配置文件将其永久关闭
vim /etc/selinux/config
# 把 enforcing 改为 disabled
SELINUX=disabled
6.新建普通用户:
# 把 new 更改为你想要的用户名
useradd new
# 为 new 设置登陆密码
passwd new
7.(强化SSH)设置密钥认证的方式来远程登陆服务器:
# 使用软件比如 Xshell 生成密匙,将其复制到以下文件,保存退出
vim ~/.ssh/authorized_keys
#设置权限
chmod 700 ~/.ssh
8.(强化SSH)关闭密码认证的方式登陆服务器 + 修改默认端口防止恶意登陆:
vim /etc/ssh/sshd_config
# 将 yes 改为 no 即可禁止使用密码登陆
PasswordAuthentication yes
# 将 yes 改为 no 即可禁止使用root登陆(可选操作)
PermitRootLogin yes
# 将默认端口 22 改为 任意数字比如 222
Port 222
在重启 ssh 之前,务必修改 iptables 放行自定义的端口以及禁用默认端口!
# 打开 iptables 文档,修改如下:
vim /etc/sysconfig/iptables
# 放行刚设置的自定义端口 222
-A INPUT -p tcp -m tcp --dport 222 -j ACCEPT
# 禁用默认端口22,前面加上 # 注释掉即可
# -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
以上修改好,就可以重启 ssh 了:
systemctl restart sshd.service
# 检查下自定义端口是否在运行
netstat -tulpn | grep sshd
# 最后再重启 iptables 即可
systemctl restart iptables
9.(强化SSH)安装 fail2ban
,参考教程:Using Fail2ban to Secure Your Server:
# 安装
yum install fail2ban
# 复制两份默认配置文件为 .local,后面修改它们即可 override 默认配置文件
cp /etc/fail2ban/fail2ban.conf /etc/fail2ban/fail2ban.local
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
修改 jail.local
,保护 sshd
,验证失败超过3次即封禁60分钟:
vim /etc/fail2ban/jail.local
# 修改如下
# Note: if systemd backend is chosen as the default but you enable a jail
# for which logs are present only in its own log files, specify some other
# backend for that jail (e.g. polling) and provide empty value for
# journalmatch. See https://github.com/fail2ban/fail2ban/issues/959#issuecomment-74901200
backend = systemd
[sshd]
enabled = true
# "bantime" is the number of seconds that a host is banned.
bantime = 60m
# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
findtime = 60m
# "maxretry" is the number of failures before a host get banned.
maxretry = 3
以上修改完毕,开启服务:
systemctl start fail2ban
systemctl enable fail2ban
10.安装实时监控软件 netdata
bash <(curl -Ss https://my-netdata.io/kickstart.sh) --disable-telemetry
还可以再配置下通过域名访问 netdata(可选非必要),看项目wiki:running behind nginx。
二、搭建LNMP
配置让网站跑起来的 LNMP 环境的方法有:
安装
在终端上敲命令是一件很 NB
的事情,于是我折衷选择了第2条不归路!
# 下载一键脚本需要用到命令 wget
# 安装一键脚本大概得至少40分钟才能安装完成
# 为避免远程登陆中因网络中断或误关闭xshell窗口导致任务丢失
# 最好使用 screen
# 如果中途断开连接的话,登陆上去后运行 screen -r lnmp 即可恢复
yum install -y screen wget && screen -S lnmp
# 开始安装
# 如果需要安装 LNMPA 或 LAMP,将./install.sh 后面的参数 lnmp 替换为 lnmpa 或 lamp 即可
wget http://soft.vpser.net/lnmp/lnmp1.7.tar.gz -cO lnmp1.7.tar.gz && tar zxf lnmp1.7.tar.gz && cd lnmp1.7 && ./install.sh lnmp
安装成功之后在浏览器输入服务器IP确认下能否访问~
优化
1.确认可以访问的话,就可以删除欢迎界面的文件了:
cd /home/wwwroot/default && rm -rf *.php *.html *.gif
2.修改访问数据库的页面路径(可选操作):
# 将当前目录下的 phpmysql 文件夹重命名为一个只有你知道的名字
mv phpmyadmin examplename
# 修改之后的管理界面地址就是:http://ip/examplename/
提示:配置文件权限错误,不应任何用户都能修改?
原因:phpmyadmin 目录权限过高,系统设置了 777 访问权限。
解决方法:chmod -R 755 phpmyadmin
3.安 装 memcached
memcached
是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。
# 通过一键脚本自带的扩展脚本来安装:
cd ~/lnmp1.7 && ./addons.sh install memcached
# 选择 php-memcached,输入 2,回车开始编译安装
将 memcached
成功安装在服务器上之后,还需要做多几步配置:
- 按照WordPress 如何启用 Memcached 缓存:将
object-cache.php
文件复制到wp-content
目录; - 修改
wp-config.php
,加入这行:define('WP_CACHE', true);
WP站点只有这样才算启用了 memcached 缓存,最后参考这里的“查看效果”的方法。
4.安 装 opcache
opcache
通过将 PHP 脚本预编译的字节码存储到共享内存中来提升 PHP 的性能,存储预编译字节码的好处就是省去了每次加载和解析 PHP 脚本的开销。
# 通过一键脚本自带的扩展脚本来安装:
cd ~/lnmp1.7 && ./addons.sh install opcache
三、安装 WordPress
1.首先做好 域名解析
,然后用脚本命令新建一个虚拟机 lnmp vhost add
,该步骤能同时申请到 let's encrypted
证书以便后面开启 HTTPS
,接着下载WP:
# 进入网站根目录
cd /home/wwwroot/www.你的网站.com
# 下载WP安装包
wget https://wordpress.org/latest.zip
# 解压到当前目录
unzip latest.zip
# 移动到网站目录下
mv wordpress/* .
2.接着修改好网站目录权限,防止主题插件等安装使用不了等情况:
chattr -i /home/wwwroot/www.你的网站.com/.user.ini
chown -R 755 /home/wwwroot/你的网站.com
chown -R www:www /home/wwwroot/你的网站.com
3.然后再设置下301重定向https,参考原文教程:
# 添加到该网站/虚拟机的配置文件下
# 比如我要跳转 www.shenguanqun.com 到 shenguanqun.com
vim /usr/local/nginx/conf/vhost/shenguanqun.com.conf
#修改添加如下
server_name shenguanqun.com www.shenguanqun.com ;
if ($host = 'www.shenguanqun.com') {
return 301 https://shenguanqun.com$request_uri;
}
4.最后访问网站域名,WordPress安装引导界面就出来了~