之前根据在 Linode VPS 上部署 LAMP 服务器的经验写了安装记录,得到不少网友的亲睐。随着 CentOS 7 发布,安装过程发生了不少变化。因此在虚拟机上跑了一下,根据之前的记录做了修改,以供参考。主要注意的是,现在数据库由 MySQL 改成 MariaDB 了,故而 LAMP 代表的就是 Linux + Apache + MariaDB + PHP 了。
新的 CentOS 与 RHEL 的关系越来越密切,以下的安装过程同时适用于 CentOS 7 及 RHEL 7 发行版。但是因为不是在当前实际的 Linode VPS 环境下测试的,可能某些地方会与实际情况有出入,还请大家指正。
作为一个全新的教程,还是简单介绍一下背景吧。
系统:新的 CentOS 7 采用了 systemd,因而某些指令有所变化;现在使用 MariaDB 替代 MySQL 作为数据库软件,这里也将直接安装 MariaDB。
Linode VPS:虽然 Linode 一直在升级改造,但是基本的东西还是没什么变化,而且现在有试用了。用 Visa / MasterCard 信用卡购买 Linode VPS 还是非常方便的,选择套餐 – 注册 – 选择服务器位置并付款(输入信用卡信息)就行了。
在 Linode 上部署系统应该也没什么变化:
- (登录)进入控制中心 – 进入 Dashboard – Deploy a Linux Distribution
- 选择 Linux 发行版(Distribution) – 设定磁盘大小(单位 MB)- 选择是否使用交换空间(swap) – 设定 root 密码(以后还能改)等,然后点击 Deploy 就开始安装系统了。
*注意:还可以在选择 Linux 发行版的时候,直接使用选择框右边的 Deploying using StackScripts 的提示来选择在安装系统的同时部署一个 LAMP 的服务器环境。
这些操作都是一目了然的,没什么难度,特别是 Linode 还有详细的新手指南。可是配置 LAMP 服务器就比较费事了。虽然一键安装的快捷编译安装脚本,或者 Linode 上的自动化安装脚本很省事,可自己把这些过程走一遍是有利于以后维护服务器的。
下面记录的安装和配置 Linux + Apache + MariaDB + PHP + phpMyAdmin 服务器环境是从使用 Putty 等 SSH 远程登录软件连接到 VPS 之后开始的。也就是说,Linux 应该已经安装好了。(如果要在本地用虚拟机测试,请同时参考我的 VPS 学习之路系列文章。)
快捷阅读目录
0 系统运行环境¶
- Linux Distribution: CentOS 7 64bit
- RAM: 1024MB
- Disk Space: 5GB
- 域名: cnzhx.net
- IP 地址: 12.34.56.78
- SELinux 已禁用
示例用的内容应该换成自己的;建议内存不小于 1GB 的安装 64 位系统,比如因为这个。
切记:因为系统不同,指令可能有所不同;硬件不同,配置方式也可能有些不同。强烈建议实战前现在自己的电脑上用 VirtualBox 之类的软件创建个虚拟机先练练手。可参考我的 VPS 学习之路。
1 基本设置¶
这一部分参考 Linode 知识库 – 参考资料 1。
1.1 设置 HOSTNAME¶
echo "HOSTNAME=cnzhx.net" >> /etc/sysconfig/network hostname "cnzhx.net"
我给设置成自己的主域名了。其实别的也可以,比如 CnZhx。
1.2 配置 vim¶
注意:
- Linode 上直接部署的 CentOS 7 中已经安装了 vim。
- 如果系统中没有安装 vim,可以试试看 vi,只是没有 vim 好用和好看罢了。
- 如果不用 vim 就直接跳到下面的 1.3。
或者先安装 vim 也行:
yum -y install vim
为了使之彩色显示代码,同时还支持行号标记和鼠标定位,需要编辑 vim 配置文件:
vim /etc/vimrc
从键盘输入 i
进入编辑模式,按 PgDn 到文本最后,在末尾分两行输入:
set nu set mouse=a
从键盘输入 Ctrl+c
,然后输入 :wq
保存、退出。
1.3 更新 HOSTS 配置文件 /etc/hosts
¶
这个文件的作用跟 Windows 中的 HOSTS 类似,可以给本地系统直接解析域名,这里设置了之后,这个系统访问 cnzhx.net 就不需要访问域名解析服务器了。
输入
vim /etc/hosts
打开编辑。在最后添加,
12.34.56.78 cnzhx.net
保存退出。
1.4 配置网络¶
可以跳过这一步,直接使用 Linode 默认配置,等以后再配置静态 IP。
其实一个服务器就相当于一台个人电脑,只不过 IP 地址是固定的公网的 IP。因而可以在自己的域名管理系统那里将域名的 IP 指定为这个特定的 IP,然后别人就可以通过域名访问到这个 IP 地址所在的服务器(域名解析服务器会做转换)。然后这个服务器上安装了相应软件就可以提供网站服务了。
默认情况下,Linode VPS 使用 DHCP 来配置网络,这样做需要 VPS 运行 dhcp 客户端进程来从主控制台获取本 VPS 的 IP。当然会浪费一些资源了(CPU和内存),而且还需要开放 63 端口。所以这里采取静态网络配置来避免这些问题。
网络配置与选择的 VPS 服务商的配置有关,一般都会有说明的。
如果要增加 IPv6 支持,请参考 Linode VPS 上启用 IPv6 支持。
从 Linode Manager 中的 Remote Access 标签页中可以获知自己 VPS 的网络配置信息。比如我的:
Public IP: 12.34.56.78
Default Gateways 12.34.56.1
DNS Resolvers 74.207.241.5
74.207.242.5
2600:3c01::2
2600:3c01::3
修改 DNS 解析设置:
vim /etc/resolv.conf
按照上面的 DNS Resolvers 对应录入
domain members.linode.com search members.linode.com nameserver 74.207.241.5 nameserver 74.207.242.5 nameserver 2600:3c01::2 nameserver 2600:3c01::3 options rotate
保存并退出。
然后配置静态 IP(如果使用了 DHCP 自动获取 IP 则可以跳过此步骤直接到 1.5 继续):
vim /etc/sysconfig/network-scripts/ifcfg-static-eth0
如果是 VirtualBox 虚拟机,则是,
vim /etc/sysconfig/network-scripts/ifcfg-static-enp0s3
对应录入,
# Configuration for eth0 DEVICE=eth0 BOOTPROTO=none # 暂时不启用 IPv6 IPV6INIT=no # This line ensures that the interface will be brought up during boot. ONBOOT=yes # eth0 - This is the main IP address that will be used for most outbound connections. # The address, netmask and gateway are all necessary. IPADDR0=12.34.56.78 # 不再用 netmask; 24 表示公网IP;17 表示内网 IP PREFIX0=24 # gateway GATEWAY=12.34.56.1 # 如果还有另一个公网 IP 23.45.67.89 IPADDR1=23.45.67.89 PREFIX1=24
保存并退出。
因为 DHCP 已经不需要了,可以使用 systemctl list-unit-files –type=service 命令查看 dhcp 相关服务的状态,然后停止它们。甚至可以删除相关软件包:
yum remove dhcp
重起 VPS 即可生效。
1.5 设置时区为 Hongkong¶
将香港时区文件设置符号链接到 localtime
ln -sf /usr/share/zoneinfo/Hongkong /etc/localtime timedatectl list-timezones timedatectl set-timezone Asia/Hong_Kong timedatectl
更详细配置说明请参考:正确配置 Linode VPS 系统时间。
2 安装 LAMP¶
2.1 先更新系统
yum update
2.2 安装并配置 Apache 网络服务器¶
CentOS 7 中默认的是 Apache 2.4 版本,Apache 官网有份很好的 vhost.conf 配置实例。
安装
yum install httpd
备份配置文件(建议对于所有的配置文件,做任何更改前都先备份一份,以便应对未知错误)
mkdir ~/confbak cp -R /etc/httpd ~/confbak
默认情况下 Apache 加载的模块(.so)过多,作为个人用的简单服务器可以比较安全的禁用其中一些模块,以提高 Apache 的性能、减少内存占用。请参考这里。
因为默认情况下,位于 /etc/httpd/
目录下的所有以 .conf
结尾的文件都会被读取,并按照字母顺序加载做为 Apache
的配置,所以增加虚拟主机的时候,实际上不需要修改 /etc/httpd/conf/httpd.conf
,而是在 /etc/httpd/conf.d/
下新建一个配置文件 vhost.conf
来配置虚拟主机。
也有人每个虚拟主机(或网站、或域名)都单独弄个 conf 文件,比如 cnzhx.net.conf、test.cnzhx.net.conf、phpmyadmin.conf 等。这个看自己的喜好还有使用方便而定吧。
另外就是,水景一页建议另建一个 common.conf 文件来放置一些公共的设置,如果不想每次都去修改 httpd.conf 这个 Apache 的主配置文件的话。
配置虚拟主机(/etc/httpd/conf.d/vhost.conf
)
vim /etc/httpd/conf.d/vhost.conf
输入下面的内容(# 号后面的该行内容是注释):
1. 下面有路径中使用了域名 cnzhx.net 来做文件夹的名字,只是为了方便区分不同的域名,无它意。
2. 在服务器上一行行输入还是挺麻烦的,可以在本地编辑好了,然后通过 ftp 上传过去( filezilla 就挺好,有中文界面,还支持 ssh 登录(选择 sftp 模式即可))。
# # cnzhx.net # <VirtualHost *:80> ServerAdmin admin@cnzhx.net ServerName cnzhx.net ServerAlias www # 非常感谢 cheers 的提醒,虽然测试显示无影响,但 Apache 文档如此要求 # 注意下面这行末尾不要带 / DocumentRoot /srv/www/cnzhx.net/html <Directory "/srv/www/cnzhx.net/html/"> Options FollowSymLinks # 下一行这样设置就可以在网站文件的目录中使用 .htaccess AllowOverride All # 下一行是替代 Allow from all 的新机制 Require all granted </Directory> ErrorLog /srv/www/cnzhx.net/logs/error.log CustomLog /srv/www/cnzhx.net/logs/access.log combined #ServerSignature Off </VirtualHost> # # test.cnzhx.net # <VirtualHost *:80> ServerAdmin admin@cnzhx.net ServerName test.cnzhx.net ServerAlias test DocumentRoot /srv/www/test/html <Directory "/srv/www/test/html/"> Options FollowSymLinks AllowOverride All Require all granted </Directory> ErrorLog /srv/www/test/logs/error.log CustomLog /srv/www/test/logs/access.log combined #ServerSignature Off </VirtualHost> # 为了以后给访问 phpMyAdmin 的时候用,也可以是别的端口,如 4444 Listen 2082 # # phpMyAdmin,访问地址:http://12.34.56.78:2082 # <VirtualHost 12.34.56.78:2082> ServerAdmin admin@cnzhx.net DocumentRoot /srv/www/phpmyadmin/html #<Directory "/srv/www/phpmyadmin/html/"> # Options FollowSymLinks # AllowOverride None # Require all granted #</Directory> ErrorLog /srv/www/phpmyadmin/logs/error.log CustomLog /srv/www/phpmyadmin/logs/access.log combined #ServerSignature Off </VirtualHost>
虽然配置文件写好了,但是还不能启动 httpd
进程,因为上面设置的各个文件夹(网站目录)还没有创建。
创建各个虚拟主机的文件夹
mkdir /srv/www/cnzhx.net/html -p mkdir /srv/www/cnzhx.net/logs mkdir /srv/www/test/html -p mkdir /srv/www/test/logs mkdir /srv/www/phpmyadmin/html -p mkdir /srv/www/phpmyadmin/logs
为了能够在系统启动时自动运行 Apache 服务器,需要运行下面的指令:
systemctl enable httpd
输出类似于,
ln -s '/usr/lib/systemd/system/httpd.service' '/etc/systemd/system/multi-user.target.wants/httpd.service'
然后重新加载 httpd
systemctl reload httpd
现在需要将 http 服务加入防火墙以允许外部访问,
firewall-cmd --add-service=http --permanent
–permanent 参数表示这是一条永久防火墙规则,如果不加则重启系统后就没有这条规则了。
而对于自定义的 2082 端口,也需要添加防火墙规则,
firewall-cmd --zone=public --add-port=2082/tcp --permanent
重启 Firewalld 使该规则生效,
systemctl restart firewalld
加入后的防火墙规则为:
# firewall-cmd --list-all public (default, active) interfaces: enp0s3 sources: services: dhcpv6-client http ssh ports: masquerade: no forward-ports: icmp-blocks: rich rules:
如果已经做好了 DNS 域名解析,现在用浏览器打开域名应该能够看到 Apache 的测试页面了。
httpd 服务默认配置文件:
- 默认配置文件: /etc/httpd/conf/httpd.conf
- 加载模块的配置文件: /etc/httpd/conf.modules.d/ directory (e.g. PHP)
- 选择 MPMs (处理模式) [worker, prefork (默认是这个)] 和 event: /etc/httpd/conf.modules.d/00-mpm.conf
- 默认端口: 80 和 443 (SSL)
- 默认日志: /var/log/httpd/{access_log,error_log}
systemctl 是新的 systemd 下的系统控制指令,详情请参考 CentOS 7 / RHEL 7 systemd 指令一文。
还可以直接用 apachectl 来控制 Apache 服务执行一些操作,比如优雅的重新加载配置,
apachectl graceful
详情需要查看其简单的帮助文件,
apachectl -h
其它重要的防火墙 Firewalld 选项有,
# firewall-cmd --state # firewall-cmd --list-all # firewall-cmd --list-interfaces # firewall-cmd --get-service # firewall-cmd --query-service service_name # firewall-cmd --add-port=8080/tcp
2.3 安装和配置 Mariadb 数据库服务¶
MariaDB 是在 MySQL 基础上重建的一个数据库软件,各 Linux 发行版都陆陆续续从 MySQL 切换到了 MariaDB。CentOS 从 7 开始默认使用 MariaDB。
2.3.1 安装
yum install mariadb-server mariadb
2.3.2 加入随系统启动
systemctl enable mariadb
输出结果类似于,
ln -s '/usr/lib/systemd/system/mariadb.service' '/etc/systemd/system/multi-user.target.wants/mariadb.service'
2.3.3 启动 mariadb 守护进程(mysqld)
systemctl start mariadb
其默认用户名还是 mysql,
top -u mysql
可以查看内存占用情况。
停止/重启或停用 mariadb 服务的一些指令:
停止 sudo systemctl stop mariadb 重启 sudo systemctl restart mariadb 禁用 sudo systemctl disable mariadb 检查 mariadb 服务器 是否正在运行 sudo systemctl is-active mariadb
2.3.4 安全配置 MariaDB
使用 MariaDB 内建的安全配置脚本进行配置
mysql_secure_installation
这里需要配置 mysql 根用户和密码、清除其他用户、清除不需要的数据库等。输出类似于下面的执行过程,其中需要我们从键盘输入的内容用蓝色注释出来了:
# /usr/bin/mysql_secure_installation /usr/bin/mysql_secure_installation: line 379: find_mysql_client: command not found NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MariaDB to secure it, we'll need the current password for the root user. If you've just installed MariaDB, and you haven't set the root password yet, the password will be blank, so you should just press enter here. Enter current password for root (enter for none):这里直接回车,这里可不是 Linux root 用户,而是 MariaDB 数据库的 root 用户 OK, successfully used password, moving on... Setting the root password ensures that nobody can log into the MariaDB root user without the proper authorisation. Set root password? [Y/n] y New password:输入你的数据库root用户密码 Re-enter new password:再输入一遍 Password updated successfully! Reloading privilege tables.. ... Success! By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] y ... Success! Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] y ... Success! By default, MariaDB comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] y - Dropping test database... ... Success! - Removing privileges on test database... ... Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] y ... Success! Cleaning up... All done! If you've completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB!
然后使用 MySQL 的 root 帐户(不同于 Linux 的 root 帐户,刚才设置密码了)登录进去
mysql -u root -p
输入密码后回车,下面是输出示例,可以看到命令提示符变为 MariaDB [(none)]>
# mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 10 Server version: 5.5.37-MariaDB MariaDB Server Copyright (c) 2000, 2014, Oracle, Monty Program Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>
创建一个新数据库给 WordPress 用(这里取名为 wordpress,也可以用别的名字)
MariaDB [(none)]> create database wordpress;
创建一个新用户,并将该数据库的权限赋给他(这里只是举例,用户名为 newdbuser,密码为 dbuserpassword)
MariaDB [(none)]> grant all on wordpress.* to 'newdbuser' identified by 'dbuserpassword';
更新权限
MariaDB [(none)]> flush privileges;
退出数据库
MariaDB [(none)]> quit
备份配置文件,
cp /etc/my.cnf ~/confbak/my.cnf.bak
其它的先不做了,回头用图形界面的 phpMyAdmin 来做。
2.4 安装和配置 PHP¶
注意:如果要使用 event 模式的话,需要安装使用 php-fpm。
安装 PHP5,
yum install php
备份配置文件 /etc/php.ini
,还有 php.conf 以及 10-php.conf,
cp /etc/php.ini ~/confbak/php.ini.bak cp /etc/httpd/conf.d/php.conf ~/confbak/httpd/conf.d/php.conf.bak cp /etc/httpd/conf.modules.d/10-php.conf ~/confbak/httpd/conf.modules.d/10-php.conf.bak
并确保 /etc/php.ini
中有下面的语句(不同的就修改,没有的就添加,某些数值可以后再调整,这是针对一个简单的运行 WordPress 的服务器的配置):
error_reporting = E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR display_errors = Off log_errors = On max_execution_time = 300 memory_limit = 32M
2.5 安装 php-mysql¶
为了在 PHP 中使用 MySQL,还需要安装这个 php-mysql
包:
yum install php-mysql
3 安装和配置 phpMyAdmin¶
Remi 安装源上有最新的 PHP、MySQL 以及 phpMyAdmin 的 Yum 安装包,可以方便安装、更新。但是正在使用的 Linux 发行版 CentOS 7 上的软件包可能版本上要求不一样,所以使用 Yum 安装源优先级插件来进行控制。
3.1 安装使用 EPEL Repository
选择合适的源地址来安装,参考方法:安装使用 EPEL 安装源。
到 EPEL 主页:
http://fedoraproject.org/wiki/EPEL#How_can_I_use_these_extra_packages.3F
找到 The newest version of ‘epel-release’ for EL7,点击打开新页面,复制 epel-release-7-5.noarch 的链接(数字可能有变化,当前版本是 7.5)。采用下面的方法直接安装:
yum install http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
3.2 安装phpMyAdmin¶
yum install phpmyadmin
嗯,前面已经打好基础了,所以这里就是这么简单。
3.3 配置
phpMyAdmin 的默认安装目录是 /usr/share/phpMyAdmin
,同时会在 Apache 的配置文件目录中自动创建虚拟主机配置文件 /etc/httpd/conf.d/phpMyAdmin.conf
(区分大小写)。
备份配置文件,
cp /etc/httpd/conf.d/phpMyAdmin.conf ~/confbak/httpd/conf.d/phpMyAdmin.conf.bak
在这个配置文件中有设置:
#Alias /phpMyAdmin /usr/share/phpMyAdmin #Alias /phpmyadmin /usr/share/phpMyAdmin
也就是说,我们可以通过绑定到 Apache 服务器上的任何域名访问 phpMyDdmin。比如这里可以通过 cnzhx.net/phpmyadmin
或者 cnzhx.net/phpMyAdmin
访问。但是这样一来,phpMyAdmin 的内容就与网站内容混到一起了,感觉 phpMyAdmin 成了网站的一个目录。但实际上我们并不希望别人也去访问这个页面。所以我们使用习惯的地址加端口(不是默认的 80 端口)的方式,即 IP:port/phpMyAdmin
的链接形式访问 phpMyAdmin,加 # 注释掉上面的 Apache Alias
规则(在上面每一行 Alias
前面加上 # 号),并将
<Directory /usr/share/phpMyAdmin/> ......... </Directory>
里面的
Require ip 127.0.0.1 Require ip ::1
改成
Require all granted
保存退出,使之可以从任何地方都可以访问。如果本地电脑是固定 IP 的,为了安全,也可以将上面的 All
改为本地电脑的 IP。咱的 ADSL 就享受不到这样的待遇了。
因为在前面创建虚拟主机配置文件 /etc/httpd/conf.d/vhost.conf
的时候已经为 phpMyAdmin 配置了一个端口为 2082 的虚拟主机,只能通过该虚拟主机(端口)访问 phpMyAdmin。因为 /srv/www/phpmyadmin/public_html
配置为 phpMyAdmin 的虚拟主机目录,为该目录创建符号连接到 phpMyAdmin 安装目录(/usr/share/phpMyAdmin
):
ln -sf /usr/share/phpMyAdmin /srv/www/phpmyadmin/html
备份然后修改 phpMyAdmin 的配置文件,
cp /etc/phpMyAdmin/config.inc.php ~/confbak/config.inc.php.bak vi /etc/phpMyAdmin/config.inc.php
找到其中的如下代码段:
$cfg['blowfish_secret'] = '随便填上一串乱七八糟的字符即可';
按照上面的提示填写 blowfish_secret
字符串。其他的不用修改,保存并退出。
3.4 重起 Apache 使配置生效
systemctl restart httpd
现在就可以通过 ip:port/phpMyAdmin
(将 IP 换为 VPS IP,端口为前面 2.1 中设置的 phpmyadmin 的虚拟主机端口,注意大小写)访问 phpMyAdmin 了。
使用前面创建的用户名和密码(2.3.4 中 grant 语句中包含的用户名和密码)登录 phpMyAdmin。
然后还可以按照自己的使用习惯对 phpMyAdmin 的行为进行配置,请参考我写的另一篇文章:个性化配置 phpMyAdmin。
4 创建一个新帐户以访问网站文件¶
因为按照本文的安装方法,Apache(httpd 进程) 的运行用户为 apache
,不做改动的话,WordPress 的运行用户也就是 apache
了。访问服务器的时候虽然可以用 root
,但是安全起见,最好禁止 root
用户远程登陆服务器,而 http 服务的用户 apache
又不能用来登录并管理服务器,所以这里新建一个普通用户用于远程管理网站文件,而管理服务器的时候可以通过这个用户登录后 su root
来执行。
4.1 增加新用户
useradd username
这里只是举例,使用 username 做为用户名,下同。Linux 中的用户相关操作可以参考这篇文章,有关于 useradd、passwd 等指令的介绍。
4.2 为新用户设置密码
passwd username
4.3 修改 /srv/www/
的子目录和文件的属主和组为新用户(username)及其组(username)
chown username:username /srv/www/* -R
-R 表示递归操作所有子文件夹。
4.4 上传网站文件
使用新创建的用户,通过 FileZilla(或其它 sftp 软件,使用 SFTP – SSH File Transfer Protocal 协议连接)登录服务器(当然,能修改(上传)的目录和文件是由 SSH 登录的用户的权限决定的),将网站文件上传到前面设置虚拟服务器时设定的文件夹,这里:
cnzhx.net
的文件位于/srv/www/cnzhx.net/html
目录下;test.cnzhx.net
的文件位于/srv/www/test.cnzhx.net/html
目录下。
4.5 文件及文件夹权限设置
使用 WordPress 的时候需要上传附件、更新插件或者 WordPress 本身等操作,这些操作需要对特定的某些文件、目录有写入权限。有 2 个解决方案:
- 方法 1:这种方法可以在 WordPress 后台执行一切更新插件或 WordPress 本身的操作、可上传附件、方便使用 WPSC 等缓存插件,等等等等。这就要求赋予
apache
用户比较大的权限,即,让 apache 用户成为这些目录和文件的所有者。直接将该网站文件夹的所有者和组都改成apache
,但是将新建的管理用户 usename 增加到apache
组并使该组有 2775 的权限(也许可以是 2770),即,所有文件和文件夹以及新建的文件夹和文件都对用户apache
和组apache
完全可读可写可执行。顺次输入命令,cd /srv/www/cnzhx.net/html chown apache:apache * -R chmod 2775 * -R usermod -a -G apache username
最后一行指令将用户
username
添加到apache
组中。这样做的目的是,username 这个用户也可以拥有对网站文件的完全操作权限,方便使用 ftp 软件维护网站源文件。
重起 Apache 服务(service httpd restart
)使之生效。 - 方法 2:保守一点的方案是,仅保证 WordPress 后台可以上传附件,使用 WPSC 等缓存插件,而更新插件和 WordPress 的操作通过 ftp 上传更新文件的方式来进行:仅仅修改受影响的一部分文件夹的所属组属性即可,其它仍保留其所有者为 username。
一般需要让 WordPress 本身可写入和修改文件的文件夹只有 uploads。进入 WordPress 安装目录的wp-content
目录中:cd /srv/www/cnzhx.net/public_html/wp-content/
首先为了保证上传附件功能,修改
uploads
文件夹以及其子文件夹和文件的属性(属主改为 apache,组不变:chown apache:apache uploads -R chmod 2755 uploads
其次,如果是 WordPress 多站点模式,还需要按照同样的方法修改
/wp-content/blogs.dir
目录属性。为了使 WPSC 可创建缓存文件,在wp-content
目录下新建文件夹cache
,并同样修改属性。不过,如果要安装 WPSC,还是需要按照其提示做一些操作的。最后将 username 添加到 apache 组中:
usermod -a -G apache username
(参考 Linux 中将用户添加到组的指令。)
5 优化及安全¶
安装完服务器,进行了基本的配置之后,下一步就该考虑安全和优化问题了。进行基本的安全设置非常有必要,这样可以避免被人“无意”中入侵。
请分别参考下列系列文章:
- 水景一页的 VPS 安全配置记录
- 使用 Zend Opcache 加速 PHP
- Linode 开启 IPv6 支持
- 在 Linode VPS 的 LAMP 平台上部署 SSL 加密服务
- 想转成 MPM Event + PHP-FPM 模式?
6 更新说明¶
如果有更新,个别地方的更新说明就放在原地,较大范围的更新说明放在这里。
7 FAQ¶
7.1 访问虚拟主机一直显示 testing 1 2 3 页面(如前面的图示)
如果检查配置都没问题的话,可能是因为没有禁用 SELinux 并立即生效(文中要求过),或者是没有正确配置 SELinux。