现在VPS不像以前了,Vultr 这种2.5美元1个月的都不能算最便宜,不过性价比不错,弄个来用其实用处挺多的,就是要注意新用户要到网站可下角找 Coupons 那个链接进去注册,送50美元用2个月,如果第一次充值用优惠码SSDVPS
送20美元,默认送5美元有点亏
在Vultr上配置Linux + Nginx + PHP + MariaDB + StartSSL + WordPress
如果是 root 用户 ssh 登录的 CentOS 7 先配置下服务器
创建一个新用户、设置密码、分配到 wheel 组以便可以使用 sudo 命令,密码复杂点,反正基本上只用一次
adduser admin passwd admin gpasswd -a admin wheel
复制本地ssh key到新用户,这样就可以把现在的putty改个用户名直接登录,然后配置sudo时不用密码
cp /root/.ssh/authorized_keys /root/.ssh/authorized_keys.pub ssh-copy-id -i /root/.ssh/authorized_keys.pub admin@localhost rm -f /root/.ssh/authorized_keys.pub echo "admin ALL=(ALL) NOPASSWD: ALL" | tee /etc/sudoers.d/user
修改一下时区
ln -sf /usr/share/zoneinfo/Asia/Chongqing /etc/localtime
禁止root用户登录,自己确定用不用
nano vi 都是文本编辑器,所以如果不是修改参数可以用 tee 命令更方便
sudo nano /etc/ssh/sshd_config
在打开的文件中修改这两行,禁止 root 用户登录可根据需要配置,但是禁用密码登录强烈建议开启
PermitRootLogin no PasswordAuthentication no UsePAM no
Ctrl + o 保存,Ctrl + x 退出,然后重新载入
sudo systemctl reload sshd
配置 Swap 交换分区,小内存非常有必要,否则 mariadb 数据库会经常无法连接
首先检查有没有交换分区,第一条看内存,第二条看交换分区信息的,没有输出表示没有,第三条查看硬盘信息
free -m swapon -s df -h
创建交换分区使用的文件,配置权限,创建交换分区,查看交换分区信息,修改配置等等,听说交换分区2倍内存大小比较合适
sudo fallocate -l 2G /swapfile sudo chmod 600 /swapfile ls -lh /swapfile sudo mkswap /swapfile sudo swapon /swapfile swapon -s echo "vm.vfs_cache_pressure = 50" | sudo tee /etc/sysctl.d/00-wordpress.conf cat /proc/sys/vm/vfs_cache_pressure
最后配置一下让系统一开机就知道你配置了交换分区
echo "/swapfile none swap sw 0 0" | sudo tee -a /etc/fstab
然后用新用户登录,接下来安装 yum 源
sudo yum -y install epel-release sudo rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
因为 EPEL 源 nginx 版本太低,有可能不支持 http2,所以启用 nginx 官方源,参考http://nginx.org/en/linux_packages.html#mainline
sudo vi /etc/yum.repos.d/nginx.repo
写入以下内容,然后!wq
保存
[nginx] name=nginx repo baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/ gpgcheck=0 enabled=1
安装 nginx,开启服务,运行服务,第一句是查看包信息,最后一句是查询运行状态的
yum info nginx sudo yum -y install nginx sudo systemctl enable nginx sudo systemctl start nginx systemctl status nginx -l
安装数据库 mariadb 数据库,并设置密码之类的
sudo yum -y install mariadb-server sudo systemctl enable mariadb sudo systemctl start mariadb sudo mysql_secure_installation systemctl status mariadb -l
安装php,如果有需要,再安装一些模块
sudo yum install -y php70w-fpm php70w-mysql php70w-xml sudo systemctl enable php-fpm sudo systemctl start php-fpm sudo yum install -y php70w-soap php70w-xmlrpc sudo yum install -y php70w-mbstring php70w-json php70w-gd php70w-mcrypt
打开 php-fpm 配置文件
sudo vi /etc/php-fpm.d/www.conf
修改程序运行的用户,监听的端口的相关的用户、权限,听说用 unix socket 好点
user = nginx group = nginx listen = /dev/shm/php-cgi.sock listen.owner = nginx listen.group = nginx listen.mode = 0660
修改一下 php 配置,通过命令写一个配置文件到/etc/php.d
echo ";自定义php配置" | sudo tee /etc/php.d/wordpress.ini echo "cgi.fix_pathinfo=0" | sudo tee -a /etc/php.d/wordpress.ini echo "date.timezone = Asia/Shanghai" | sudo tee -a /etc/php.d/wordpress.ini echo "upload_max_filesize = 256M" | sudo tee -a /etc/php.d/wordpress.ini echo "post_max_size = 256M" | sudo tee -a /etc/php.d/wordpress.ini echo "expose_php = Off" | sudo tee -a /etc/php.d/wordpress.ini vi /etc/php.d/wordpress.ini
写一个查看php信息的文件,这个用不着,要用也需要改下位置
echo "<!--?php phpinfo(); ?-->" | sudo tee -a /usr/share/nginx/html/phpinfo.php
从StartSSL上申请一个免费的证书,申请时可以直接输个密码生成csr,然后在后台工具解密就得到私钥key了
上传到服务器,放 /etc/ssl 或者其它位置都可以,禁用 root 登录后 sftp 无法上传的话可以先传到其它目录,然后复制过去
sudo mv ssl.crt /etc/ssl/ssl.crt sudo mv ssl.key /etc/ssl/ssl.key sudo chmod 400 ssl.crt sudo chmod 400 ssl.key
配置nginx,新建一个配置文件
sudo vi /etc/nginx/conf.d/wordpress.conf
写入以下信息,不知道内容的去nginx官方文档
# upstream主要是是作负载均衡的,这里没用 upstream php { server unix:/dev/shm/php-cgi.sock; #server 127.0.0.1:9000; } # 将80端口重定向到443端口,确保网站全部加密访问 server { listen 80; return 301 https://me94.me$request_uri; } server { # 监听端口,开户http2 listen 443 ssl http2; #配置网站加密证书 ssl_certificate /etc/ssl/ssl.crt; ssl_certificate_key /etc/ssl/ssl.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ALL:!DH:!EXPORT:!RC4:+HIGH:+MEDIUM:!LOW:!aNULL:!eNULL; # 启用HSTS,强制客户端使用HTTPS与服务器创建连接,includeSubDomains 非必需。 add_header Strict-Transport-Security "max-age=31536000; includeSubDomains"; # 网站根目录和首页 root /usr/share/nginx/html/wordpress; index index.php index.html index.htm; # 有些东西不需要写到日志里面去 location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { allow all; log_not_found off; access_log off; } # 配置错误页面位置,404错误wordpress会自己处理 #error_page 404 /404.html; #location = /40x.html { # root /usr/share/nginx/html; #} error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # 让wordpress的固定链接更好看 # https://codex.wordpress.org/Using_Permalinks#Using_.22Pretty.22_permalinks location / { try_files $uri $uri/ /index.php?$args; } # 将php文件交给php-fpm来处理 location ~ \.php$ { include fastcgi.conf; fastcgi_intercept_errors on; fastcgi_pass php; } # 一些图片文件之类的设置长期缓存,也不用压缩,减小服务器压力 location ~* \.(png|jpg|jpeg|gif|ico|bmp)$ { access_log off; expires max; log_not_found off; gzip off; } # 禁止访问.ht开头的文件 location ~ /\.ht { deny all; } }
听说location
处理优先级是这样的,匹配到高优先级的就不继续往下匹配了
(location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > (/)
重启几个服务
sudo systemctl restart nginx mariadb php-fpm
如果提示这类的错误表示少了/etc/nginx/fastcgi.conf这个配置文件
Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details. nginx[2840]: nginx: [emerg] open() "/etc/nginx/fastcgi.conf" failed (2: No such file or directory) in /etc/nginx/conf.d/wordpress.conf:39
去官方源码下载
cd /etc/nginx/ sudo wget https://trac.nginx.org/nginx/export/HEAD/nginx/conf/fastcgi.conf
开启防火墙,如果不会网上搜 firewalld
参考https://fedoraproject.org/wiki/FirewallD/zh-cn
https://access.redhat.com/documentation/
sudo firewall-cmd --get-service --permanent sudo firewall-cmd --zone=public --permanent --add-service=http sudo firewall-cmd --zone=public --permanent --add-service=https sudo firewall-cmd --zone=public --list-all sudo firewall-cmd --reload
还可以这样直接开特定端口
sudo firewall-cmd --zone=public --add-port=17500/tcp --permanent sudo firewall-cmd --zone=public --add-port=17500/udp --permanent
如果你某次登录时有提示There were 108 failed login attempts since the last successful login.
就可以把这个段的地址屏蔽掉
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="58.218.204.0/24" reject' --permanent sudo firewall-cmd --zone=public --list-all
如果需要删除这条防火墙记录就用这个
sudo firewall-cmd --zone=public --remove-rich-rule='rule family="ipv4" source address="58.218.204.0/24" drop' --permanent sudo firewall-cmd --zone=public --list-all
cd /usr/share/nginx/html sudo wget https://cn.wordpress.org/wordpress-4.4.2-zh_CN.tar.gz sudo tar -xzf wordpress-4.4.2-zh_CN.tar.gz
备份还原数据库,在以前服务器备份,上传到新服务器导入
sudo mysqldump --add-drop-database -B wordpress --add-drop-table -u root -p wordpress | gzip > wordpress.sql.gz sudo gunzip < wordpress.sql.gz | mysql -u root -p
更改文件权限,当然光这样设置安全性是不够的,自己去网上搜
sudo chown -R admin:nginx /usr/share/nginx/html/wordpress sudo chmod -R 760 /usr/share/nginx/html/wordpress
打开网站安装WordPress,然后简单配置一下
sudo vi /usr/share/nginx/html/wordpress/wp-config.php
在/* 好了!请不要再继续编辑。请保存本文件。使用愉快! */
前面添加这几行
define('FORCE_SSL_ADMIN', true); if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false) $_SERVER['HTTPS']='on'; define( 'WP_POST_REVISIONS', 0);
基本的东西就搞定了,不过这顶多就算可以用了,如果要更安全的话,还是好好配置一下权限和服务器
最后还可以根据需要开启 Google BBR(Bottleneck Bandwidth and RTT),提速效果非常明显,一般十几倍是没啥问题
参考https://www.vultr.com/docs/how-to-deploy-google-bbr-on-centos-7
首先升级 Linux 内核
uname -r sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org sudo rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm sudo yum --enablerepo=elrepo-kernel install kernel-ml -y rpm -qa | grep kernel
先查询再切换下引导,注意选版本号最大的,从上往下从0开始,
sudo egrep ^menuentry /etc/grub2.cfg | cut -f 2 -d \' sudo grub2-set-default 0 sudo reboot
重启后看下版本对不对,对的话开启 BBR
uname -r echo 'net.core.default_qdisc=fq' | sudo tee -a /etc/sysctl.conf echo 'net.ipv4.tcp_congestion_control=bbr' | sudo tee -a /etc/sysctl.conf sudo sysctl -p
核实下是否开启了
sudo sysctl net.ipv4.tcp_available_congestion_control sudo sysctl -n net.ipv4.tcp_congestion_control lsmod | grep bbr
然后随便下载一个文件,体验一下下载速度飙升的感觉
如果还想想要清理一下系统,但是清理内核时不要把在用的给删了
sudo yum autoremove uname -r rpm -qa | grep kernel sudo yum remove kernel-3.xx.0-693.17.1.el7.x86_64
说两句