我们一直在努力

搬瓦工 VPS CentOS 8系统 搭建 LNMP 建站环境方法步骤

虽然https://www.52pchome.com/tag/16185/" title="查看含有 https 标签的文章" target="_blank">https://www.52pchome.com/tag/20494/" title="查看含有 centos 8 标签的文章" target="_blank">CentOS 8出来很久了,但是站长通常还是喜欢用Centos 7+。最近将瓦工 标签的文章" target="_blank">搬瓦工VPS 标签的文章" target="_blank">搬瓦工VPS系统更新到了 CentOS 8,发现 LNMP 安装配置 标签的文章" target="_blank">安装配置上有了一些细节变化,所以重新记录。如果是新手,建议在全新系统环境下操作,并先运行 dnf -y upgrade 更新系统软件包,以及一些可选系统基础配置。

注:文中不少地方用了 sed 命令替换内容修改配置文件,该方式完全依赖匹配文本。如果文本有差别就会修改失败,建议在搭建生产环境时用 vi 等编辑器手动修改,以免漏掉配置。

bwh81 1建站环境方法步骤 3" srcset="https://www.52pchome.com/wp-content/uploads/2019/08/bwh81-1-780x384.png 780w, https://www.52pchome.com/wp-content/uploads/2019/08/bwh81-1-768x378.png 768w, https://www.52pchome.com/wp-content/uploads/2019/08/bwh81-1-1536x756.png 1536w, https://www.52pchome.com/wp-content/uploads/2019/08/bwh81-1.png 1903w" sizes="(max-width: 780px) 100vw, 780px" />

安装配置 Nginx

dnf -y install nginx

修改 /etc/nginx/nginx.conf 配置文件,在下面位置添加红色参数,以关闭 Nginx 版本号输出,并且将 fastCGI 标签的文章" target="_blank">FastCGI 进程超时时间设置延长,以避免 504 Gateway Time-out 问题,设置合适 buffer 值。

http {
...
sendfile            on;
tcp_nopush          on;
tcp_nodelay         on;
server_tokens       off;
fastcgi_read_timeout 300s;
fastcgi_buffer_size 16k;
fastcgi_busy_buffers_size 24k;
fastcgi_buffers 8 16k;
...
}

修改默认 server{...},禁止访问 Web 默认目录。

server {
listen       80 default_server;
listen       [::]:80 default_server;
server_name  _;
return       403;
# root       /usr/share/nginx/html;
}

修改 FastCGI 配置文件 SERVER_SOFTWARE 参数,删除版本号输出。

sed -i 's|nginx/$nginx_version|nginx|' /etc/nginx/fastcgi.conf
sed -i 's|nginx/$nginx_version|nginx|' /etc/nginx/fastcgi_params

firewall-cmd --state 检查是否安装启用防火墙。如果没有,用下面命令安装启用。

dnf -y install firewalld
systemctl start firewalld
systemctl enable firewalld

防火墙放行 HTTP HTTPS 端口。

firewall-cmd --permanent --zone=public --add-service={http,https}
firewall-cmd --reload

运行 Nginx 服务并设置开机启动。

systemctl start nginx
systemctl enable nginx

安装配置 mariadb

dnf -y install mariadb-server

运行 MariaDB 并设置开机启动。

systemctl start mariadb
systemctl enable mariadb

运行初始化安全配置。

sql 标签的文章" target="_blank">MySQL_secure_installation

输入 root 密码。安装后默认没有密码,直接按 Enter 进入下一步。

Enter current password for root (enter for none):

设置 root 密码,选择 Y 回车,输入两遍密码完成设置。

Set root password? [Y/n]

接下来几个选项都选 Y,这将删除测试帐户和数据库,以及禁用远程 root 登录并刷新权限表。

Remove anonymous users? [Y/n]
Disallow root login remotely? [Y/n]
Remove test database and access to it? [Y/n]
Reload privilege tables now? [Y/n]

至此,MariaDB 初始化安全配置完成。

安装配置 PHP

安装 FastCGI, MySQL 及其它常用 PHP 模块(对于 wordpress,官方还推荐安装 imagick 模块。不过其有潜在安全问题,涉及到的功能也很少使用,所以笔者这里没有安装),过程中会将 PHP 核心软件包作为依赖项安装。

dnf -y install php-fpm php-mysqlnd php-common php-cli php-gd php-opcache php-mbstring php-json php-xml php-pecl-zip

取消 PHP 配置文件里 cgi.fix_pathinfo 参数行注释,并设置值为 0,以防范 PHP 解释器被欺骗执行恶意文件。

sed -i 's|;cgi.fix_pathinfo=1|cgi.fix_pathinfo=0|' /etc/php.ini

取消 PHP 配置文件里 session.save_path 参数行注释,并设置值为 php-fpm 默认会话储存目录。

sed -i 's|;session.save_path = "/tmp"|session.save_path = "/var/lib/php/session"|' /etc/php.ini

更改 PHP 配置文件里 upload_max_filesize 参数,将最大文件上传调整为 20M。

sed -i 's|upload_max_filesize = 2M|upload_max_filesize = 20M|' /etc/php.ini
sed -i 's|post_max_size = 8M|post_max_size = 80M|' /etc/php.ini

更改 PHP 配置文件里 memory_limit 参数,提升最大内存用量至 512M(酌情机器配置)。

sed -i 's|memory_limit = 128M|memory_limit = 512M|' /etc/php.ini

更改 PHP 配置文件里 expose_php 参数,将值改为 Off,以关闭 PHP 版本号输出。

sed -i 's|expose_php = On|expose_php = Off|' /etc/php.ini

修改 php-fpm 配置文件,将默认 apache 用户/组改为 nginx

sed -i 's|user = apache|user = nginx|' /etc/php-fpm.d/www.conf
sed -i 's|group = apache|group = nginx|' /etc/php-fpm.d/www.conf

将 php-fpm 相关目录用户组改为 nginx

chgrp -R nginx /var/lib/php/opcache /var/lib/php/session /var/lib/php/wsdlcache

启动 php-fpm 服务并设置开机自启。

systemctl start php-fpm
systemctl enable php-fpm

开始搭建网站

这里用 WordPress 程序搭建一个示例网站。

创建网站目录和设置合适权限

# 创建网站目录
mkdir -p /var/www/example.com
# 下载 WordPress 程序并解压到目录
wget -P /var/www/example.com https://wordpress.org/latest.tar.gz
tar -zxvf /var/www/example.com/latest.tar.gz --strip-components 1 -C /var/www/example.com
rm -f /var/www/example.com/latest.tar.gz
# 设置 SElinux 读写安全上下文,以允许 httpd 进程读写网站目录/文件
# WordPress 完整功能运行有不少目录/文件需要读写,细分设置比较麻烦,所以这里递归设置
# 对于静态文件网站,则无需此设置(/var/www 目录下内容会自动标记 httpd_sys_content_t 只读安全上下文)
# 如果要删除设置的安全上下文,将下面 -a 参数改为 -d 并去掉 -t 和后面指定的安全上下文,然后再运行
semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/example.com(/.*)?"
restorecon -R -v /var/www/example.com
# 允许 HTTPD 脚本和模块连接网络(不设置 WordPress 将无法在线更新和安装主题/插件)
setsebool -P httpd_can_network_connect 1
# 将目录所有者改为 nginx 用户/组
chown -R nginx:nginx /var/www/example.com
# 如果不用 80 443 等常规 Web 端口,需设置允许 httpd 进程使用指定的端口(例如 2333 端口)
# 可使用 semanage port -l | grep http_port_t 命令查询已允许端口
# 另外别忘了设置防火墙放行端口
semanage port -a -t http_port_t -p tcp 2333

申请 Let’s Encrypt 免费证书

先设置好域名解析 标签的文章" target="_blank">域名解析。然后创建 Nginx 网站配置文件。

vi /etc/nginx/conf.d/example.com.conf

内容如下(简单使域名可访问就行,具体的之后再修改)。

server {
listen      80;
listen      [::]:80;
server_name example.com www.example.com;
root        /var/www/example.com;
}

刷新 Nginx 服务,使配置文件生效。

nginx -s reload

安装 ACME 客户端申请 ssl 证书 标签的文章" target="_blank">SSL 证书,这里用热门的 acme.sh。

# 安装后断开 SSH 连接重新登录
curl https://get.acme.sh | sh
# 设置默认申请 Let’s Encrypt 证书
acme.sh --set-default-ca  --server  letsencrypt

申请域名 SSL 证书。

acme.sh --issue -d example.com -d www.example.com -w /var/www/example.com

将证书/密钥安装到相关目录,并重启 Nginx 服务。

acme.sh --install-cert -d example.com -d www.example.com /
--key-file       /etc/pki/tls/private/example.com.key /
--fullchain-file /etc/pki/tls/certs/example.com.cer /
--reloadcmd      "systemctl force-reload nginx"

生成 DH 会话密钥。这与上面的域名密钥不同,它可以多个站点共用。

openssl dhparam -out /etc/pki/tls/certs/dhparam.pem 2048

修改 Nginx 网站配置文件

vi /etc/nginx/conf.d/example.com.conf

内容如下(为方便理解添加了中文注释,使用时建议删除)。

# HTTP 重定向到 HTTPS
server {
listen      80;
listen      [::]:80;
server_name example.com www.example.com;
return 301  https://www.example.com$request_uri;
}
# 根域名重定向到 WWW
server {
listen      443 ssl http2;
listen      [::]:443 ssl http2;
server_name example.com;
return 301  https://www.example.com$request_uri;
# 证书文件,依序为 证书链+域名证书,域名证书密钥,DH 会话密钥
ssl_certificate           /etc/pki/tls/certs/example.com.cer;
ssl_certificate_key       /etc/pki/tls/private/example.com.key;
ssl_dhparam               /etc/pki/tls/certs/dhparam.pem;
# SSL 会话,协议版本,加密算法等参数
ssl_session_timeout       5m;
ssl_session_cache         shared:SSL:10m;
ssl_protocols             TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers               ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
}
# WWW 主站点
server {
listen      443 ssl http2;
listen      [::]:443 ssl http2;
server_name www.example.com;
root        /var/www/example.com;
index       index.html index.htm index.php;
# 证书文件,依序为 证书链+域名证书,域名证书密钥,DH 会话密钥
ssl_certificate           /etc/pki/tls/certs/example.com.cer;
ssl_certificate_key       /etc/pki/tls/private/example.com.key;
ssl_dhparam               /etc/pki/tls/certs/dhparam.pem;
# SSL 会话,协议版本,加密算法等参数
ssl_session_timeout       5m;
ssl_session_cache         shared:SSL:10m;
ssl_protocols             TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers               ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
# 检查访问文件/目录是否存在,否则重定向 /index.php,若 URL 带参数则附加
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
# 可选:WordPress 程序 Google XML Sitemaps 插件伪静态重写规则
rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?/.xml$ "/index.php?xml_sitemap=params=$2" last;
rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?/.xml/.gz$ "/index.php?xml_sitemap=params=$2;zip=true" last;
rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?/.html$ "/index.php?xml_sitemap=params=$2;html=true" last;
rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?/.html.gz$ "/index.php?xml_sitemap=params=$2;html=true;zip=true" last;
# 将 PHP 请求传递给 FastCGI 处理,这里引用默认配置
include /etc/nginx/default.d/php.conf;
# 设置图片资源缓存时间
location ~ .*/.(png|jpg|jpeg|gif|bmp)$ {
expires 30d;
}
# 设置其它资源缓存时间
location ~ .*/.(js|css)?$ {
expires 12h;
}
# 拒绝对隐藏文件访问
location ~ //. {
deny all;
}
# 拒绝对指定目录 PHP 文件访问
location ~* /(?:uploads|files)/.*/.php$ {
deny all;
}
# 设置日志存儲位置
access_log /var/log/nginx/example.com.access.log;
error_log  /var/log/nginx/example.com.error.log warn;
}

修改后刷新 Nginx 服务生效。

nginx -s reload

创建网站数据库和帐户

使用数据库 root 帐号登录 SQL Shell,过程中输入之前设置的密码。

mysql -u root -p

创建一个数据库,名称可随意(不区分大小写),譬如 testdb

CREATE DATABASE testdb;

创建数据库帐户,例如用户名 testuser,密码 password,并赋予 testdb 数据库管理权限给创建的帐户。

GRANT ALL ON testdb.* TO 'testuser'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

刷新数据库权限表。

FLUSH PRIVILEGES;

之后用 exit 退出。

初始化网站程序安装

访问网站域名完成 WordPress 安装。过程中输入之前设置的数据库信息,设置网站标题,管理员帐号等。

到此,一个基于 LNMP 环境运行的 WordPress 网站就搭建安装完成了。

如果你在搭建后访问出错,先看下 Nginx 日志文件有没有错误,例如查看最近 30 条错误记录。

tail -30 /var/log/nginx/example.com.error.log

或者查看 SELinux 有没有拒绝日志。

# 查看 SELinux 最近拒绝哪些操作
ausearch -m AVC,USER_AVC,SELINUX_ERR,USER_SELINUX_ERR -ts today
# 查看错误详细信息(如果找不到命令,需安装 setroubleshoot 软件包)
sealert -l "*"

如果查看 SELinux 日志,看到类似阻止 php-fpm 可写可执行内存分配,并导致页面访问报错。可以修改 /etc/php.ini 配置文件里 pcre.jit 参数值为 0 并去掉注释(如果找不到参数,手动添加参数到 [Pcre] 分组下),然后 systemctl restart php-fpm 重启服务。

另一个解决方法是用下面命令取消 httpd 对可写可执行内存分配的限制,但这会降低安全保护,仅作最后选项。

setsebool -P httpd_execmem 1

搬瓦工优惠码:BWH3HYATVBJW,优惠6.58%,全场可用

CN2_gia_ri_ben_ruan_yin_he_lanAS99292510Gbps_dai_kuan">搬瓦工美国 CN2 GIA 标签的文章" target="_blank">美国 cn2 gia、日本软银荷兰AS9929,2.5~10Gbps带宽

内存 CPU SSD 流量 带宽 价格 购买
1G 2核 20G 1.0T/月 2.5G $50/季 链接
2G 3核 40G 2.0T/月 2.5G $90/季 链接
4G 4核 80G 3.0T/月 2.5G $57/月 链接
8G 6核 160G 5.0T/月 5.0G $87/月 链接
16G 8核 320G 8.0T/月 10G $160/月 链接
32G 10核 640G 10.0T/月 10G $290/月 链接
64G 12核 1280G 12.0T/月 10G $550/月 链接

搬瓦工香港机房VPS,1Gbps cn2 gia

内存 CPU 硬盘 流量 价格 购买
2G 2核 40G 500G/月 $90/月 链接
4G 4核 80G 1.0T/月 $156/月 链接
8G 6核 160G 2.0T/月 $300/月 链接
16G 8核 320G 4.0T/月 $590/月 链接

搬瓦工美西cn2 gt vps

搬瓦工美西cn2 gt vps测试IP:65.49.215.48

内存 CPU SSD 流量 带宽 价格 购买
1G 1核 20G 1.0T/月 1G $50/年 链接
2G 1核 40G 2.0T/月 1G $100/年 链接
4G 2核 80G 3.0T/月 1G $60/季 链接
8G 2核 160G 5.0T/月 1G $40/月 链接
16G 3核 320G 8.0T/月 1G $80/月 链接
16G 3核 320G 12T/月 1G $100/月 链接
16G 3核 320G 16T/月 1G $130/月 链接

搬瓦工网络测试

  • 美国 cn2 gia:162.244.241.103\104\105\106\107
  • 日本软银:185.212.59.148\149\150\151\152
  • 荷兰联通:104.255.65.1、104.255.64.1、104.255.66.1
  • 香港cn2 gia:93.179.124.167\168\169\170\171\172
博客声明与版权说明
重要声明
内容性质说明
本博客专注于记录博主个人对服务器产品的测评体验与相关优惠资讯,不从事任何主机、服务器租赁业务,不参与任何交易,亦非中介机构。博客所载信息均来源于网络公开渠道或服务商主动提供,仅供个人记录与交流之用。
免责声明
本博客对所刊载内容不作任何明示或默示的保证(包括但不限于准确性、完整性、时效性),内容不构成任何购买、使用建议或引导。访问者请自行甄别信息,独立作出判断并承担相应风险。
合规使用要求
访问本博客请严格遵守中华人民共和国及所在地区有关互联网的各项法律法规。严禁利用本博客提及的任何内容从事违法违规活动,由此产生的一切法律责任与后果由行为人自行承担。
访问资格
未成年人及不具备独立承担法律责任能力的个人或群体请勿访问本博客。
协议生效
您一旦访问本博客,即视为您已充分阅读、理解并同意接受本声明的全部条款。
版权声明
本站原创内容采用 知识共享 署名 - 非商业性使用 - 相同方式共享 4.0 国际许可协议(CC BY-NC-SA 4.0) 进行授权。
转载、引用请注明原文出处与作者信息。
文章名称:《搬瓦工 VPS CentOS 8系统 搭建 LNMP 建站环境方法步骤》
文章链接:https://www.52pchome.com/5729.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。