Nginx安装并搭建 wp
1、安装nginx服务器
1.1、安装所需依赖库
[root@duduhome ~]# yum install lrzsz wget git make cmake gcc gcc-c++ pcre pcre-devel openssl openssl-devel ncurses-devel libaio bison git ncurses -y
1.2、创建LNMP运行用户
[root@duduhome ~]# useradd -s /sbin/nologin -M www
-s:指定创建的用户的 bash,nologin表示不能登录
-M:表示在创建用户的时候,不创建家目录
1.3、创建用于存放网站数据的文件目录
网站数据存放目录:
[root@duduhome ~]# mkdir -p /data/www/html
数据库数据存放目录:
[root@duduhome ~]# mkdir -p /data/www/mysql
1.4、安装nginx(源码安装)
[root@duduhome nginx-1.16.0]#
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-pcre
[root@duduhome nginx-1.16.0]# make && make install
2、nginx配置文件:nginx.conf
2.1、相关配置参数(目前我自己的网站就这样配置)
[root@duduhome ~]# vim /usr/local/nginx/conf/nginx.conf
user www;
worker_processes auto;
events {
use epoll;
worker_connections 65565;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
# 响应头信息状态,更改响应头里面的Server字段用
server_tokens off;
# 加速访问,sedfile:直接内核处理,tcp_nopush:不阻塞
sendfile on;
tcp_nopush on;
#keepalive_timeout 0;
# 防爬虫,30秒内最多只能请求100次
keepalive_timeout 30;
keepalive_requests 100;
# 开启压缩文件, 文件大于10K后就开始进行压缩,
# 只对文件的类型是text/plain text/xml 的文件压缩
gzip on;
gzip_min_length 10k;
gzip_types text/plain text/xml; # 压缩类型,公司里面开发会说明
gzip_comp_level 5; # 压缩级别
# 主机配置(网站)
server {
listen 80;
server_name localhost;
charset utf-8;
root /data/www/html;
location / {
root /data/www/html;
index index.php index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /404.html
error_page 404 500 502 503 504 /404.html;
location = /404.html {
root /data/www/error_page;
}
# error_page 403 /403.html
error_page 403 /403.html;
location = /403.html {
root /data/www/error_page;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
root /data/www/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
location ~ /\.ht {
deny all;
}
}
server {
listen 80;
#填写绑定证书的域名
server_name www.yushaodu.com;
#把http的域名请求转成https
return 301 https://$host$request_uri;
}
}
2.2、隐藏响应头信息,避免被别人看到使用的是什么服务器和版本
a、修改src下的http源码文件:
[root@duduhome opt]# vim nginx-1.16.0/src/http/ngx_http_header_filter_module.c
b、找到并修改成这样(这样别人看到的头信息,server就会显示是 GitHub.com):
static u_char ngx_http_server_string[] = "Server: GitHub.com" CRLF;
static u_char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;
static u_char ngx_http_server_build_string[] = "Server: " NGINX_VER_BUILD CRLF;
c、重新编译安装nginx服务器(争对还没有开启Nginxe服务器的情况,若已经开启的在“在线升级nginx相关篇幅里面介绍”)
d、修改nginx.conf配置文件:
在http模块下添加:
server_tokens off;
3、搭建php-fpm
3.1、安装php-fpm(php7.2,因为wroldpress5.4必须要php7.0以上)
更新php安装包(CentOS7只有5.4):
[root@duduhome ~]# rpm -Uvh https://mirror.webtatic.com/yum/el7/epel-release.rpm
[root@duduhome ~]# rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
安装php-fpm相关服务:
[root@duduhome ~]# yum install php72w php72w-devel php72w-fpm php72w-mysql -y
3.2、配置 php-fpm 的配置文件
[root@duduhome ~]# vim /etc/php-fpm.d/www.conf
把里面的
user = apache group = apache
更改为
user = www group = www
因为我只有一台服务器,所以
listen = 127.0.0.1:9000
我就不更改了,若要设置静态分离,这里就要设置为你的动态处理的服务器IP
4、wordpress(这里是用的5.4.1版本)
4.1、获取wordpress网站代码
从本地上传:
[root@duduhome opt]# rz
然后找到要上传的wordpress
从wroldpress官网上下载:
[root@duduhome opt]# wget https://cn.wordpress.org/latest-zh_CN.tar.gz
4.2、把wordpress网站代码拷贝到网站数据目录下
解压:
[root@duduhome opt]# tar zxf wordpress-5.4.1-zh_CN.tar.gz
拷贝网站代码到网站数据目录下:
[root@duduhome opt]# mv wordpress/* /data/www/html/
4.3、给网站数据目录配置权限,让网站其能正常运作
[root@duduhome opt]# chown www. -R /data/www/html
5、更改自定义的403、404错误页面
5.1、创建错误页面存放的目录,这样有利于以后的管理
创建目录:
[root@duduhome www]# mkdir /data/www/error_page/
修改权限:
[root@duduhome www]# chown www. -R /data/www/error_page
5.2、403、404 错误页面:
由于篇幅问题,直接把这两个页面上传到目录里了,这些页面均复制于 https://404.life/
6、nginx、php-fpm的启动、重启等相关命令
6.1、nginx:
启动:
[root@duduhome ~]# /usr/local/nginx/sbin/nginx
重启:
[root@duduhome ~]# /usr/local/nginx/sbin/nginx -s reload
停止:
[root@duduhome ~]# /usr/local/nginx/sbin/nginx -s stop
修改配置文件后,测试是否有问题:
[root@duduhome ~]# /usr/local/nginx/sbin/nginx -t
查看版本信息:
[root@duduhome ~]# /usr/local/nginx/sbin/nginx -v
查看预编译的参数(用于升级):
[root@duduhome ~]# /usr/local/nginx/sbin/nginx -V
6.2、php-fpm:
启动:
[root@duduhome ~]# systemctl start php-fpm
重启:
[root@duduhome ~]# systemctl restart php-fpm
停止:
[root@duduhome ~]# systemctl stop php-fpm
运行状态:
[root@duduhome ~]# systemctl status php-fpm
查看版本:
[root@duduhome ~]# yum list installed | grep php
7、nginx热部署
当服务器在运行状态,而因为某些原因需要添加一些模块或者升级的时候,要做到服务器不停机,就必须用到热部署了
7.1、方法一(推荐使用)
[root@duduhome nginx-1.16.0]# /usr/local/nginx/sbin/nginx -V
–add-module:添加编译模块;eg:–add-module=./src/echo-nginx-module
[root@duduhome nginx-1.16.0]# make clean
[root@duduhome nginx-1.16.0]# ./configure 带上以前编译的模块和要添加的模块,若是升级nginx,那就把以前编译的模块加上即可
[root@duduhome nginx-1.16.0]# make && make install
[root@duduhome nginx-1.16.0]# kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
[root@duduhome nginx]# ls /usr/local/nginx/logs/
access.log error.log nginx.pid nginx.pid.oldbin
[root@duduhome nginx-1.16.0]# ps -ef | grep nginx
root 1554 1 0 11:51 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
www 1555 1554 0 11:51 ? 00:00:00 nginx: worker process
root 26978 1554 0 14:40 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
www 26979 26978 0 14:40 ? 00:00:00 nginx: worker process
root 27044 13347 0 14:41 pts/0 00:00:00 grep --color=auto nginx
向老的 master进程发信号:
[root@duduhome nginx-1.16.0]# kill -WINCH 1554
[root@duduhome nginx-1.16.0]# ps -ef | grep nginx
root 1554 1 0 11:51 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
root 26978 1554 0 14:40 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
www 26979 26978 0 14:40 ? 00:00:00 nginx: worker process
root 27343 13347 0 14:43 pts/0 00:00:00 grep --color=auto nginx
等一段时间服务器确定没有问题后退出老的master:
[root@duduhome nginx-1.16.0]# kill -QUIT 1554
[root@duduhome nginx-1.16.0]# ps -ef | grep nginx
root 26978 1 0 14:40 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
www 26979 26978 0 14:40 ? 00:00:00 nginx: worker process
root 27430 13347 0 14:44 pts/0 00:00:00 grep --color=auto nginx
7.2、方法二(不太推荐使用,容易丢失数据)
[root@duduhome nginx-1.16.0]# /usr/local/nginx/sbin/nginx -V
[root@duduhome nginx-1.16.0]# make clean
[root@duduhome nginx-1.16.0]# ./configure 带上以前编译的模块和要添加的模块,若是升级nginx,那就把以前编译的模块加上即可
[root@duduhome nginx-1.16.0]# make && make install
[root@duduhome nginx-1.16.0]# make upgrade
8、回滚
8.1、热部署的方法一可以进行热部署,方法二不行
8.2、回滚:
查看进程:
[root@duduhome nginx-1.16.0]# ps -ef | grep nginx
root 1554 22238 0 11:51 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
www 1555 1554 0 11:51 ? 00:00:00 nginx: worker process
root 1672 13347 0 11:52 pts/0 00:00:00 grep --color=auto nginx
www 1923 22238 0 May05 ? 00:00:00 nginx: worker process
root 22238 1 0 May04 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
重新拉起老的worker进程:
[root@duduhome nginx-1.16.0]# kill -HUP 22238
[root@duduhome nginx-1.16.0]# kill -QUIT `cat /usr/local/nginx/logs/nginx.pid`
经过一段时间测试,服务器没有问题后,退出老的master:
[root@duduhome nginx-1.16.0]# kill -QUIT 8054
MySQL 的安装
1、获取mysql
1.1、从本地上传:
[root@duduhome opt]# rz
然后找到mysql
1.2、从网上下载:
下载mysql:
[root@duduhome opt]# wget http://mirrors.163.com/mysql/Downloads/MySQL-5.7/mysql-5.7.25.tar.gz
下载boost:
[root@duduhome opt]# wget http://nchc.dl.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz
tar xf boost_1_59_0.tar.gz
下载二进制包(免安装,解压直接使用):
wget -c https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.28-linux-glibc2.12-x86_64.tar
2、安装(mysql5.7.25)
2.1、安装依赖
[root@duduhome ~]# yum install lrzsz wget git make cmake gcc gcc-c++ pcre pcre-devel openssl openssl-devel ncurses-devel libaio bison git ncurses numactl numactl-devel -y
2.2、解压源码包
解压mysql:
[root@duduhome opt]# tar zxf mysql-5.7.25.tar.gz
解压boost:
[root@duduhome opt]# tar zxf boost_1_59_0.tar.gz
2.3、安装(好像是从Mysql5.7后都要有boost库,否则无法安装成功)
重命名 boost:
[root@duduhome opt]# mv boost_1_59_0 boost
预编译:
[root@duduhome mysql-5.7.25]# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock -DMYSQL_DATADIR=/data/mysql -DSYSCONFDIR=/usr/local/mysql -DMYSQL_USER=mysql -DMYSQL_TCP_PORT=3306 -DWITH_XTRADB_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1 -DWITH_EXTRA_CHARSETS=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all -DWITH_BIG_TABLES=1 -DWITH_DEBUG=0 -DWITH_BOOST=/opt/boost
安装:
[root@duduhome mysql-5.7.25]# make && make install
3、创建目录和所需文件(以配置文件里面的参数为主)
数据库数据存放目录:
[root@duduhome opt]# mkdir /data/mysql/
日志文件:
[root@duduhome opt]# mkdir /data/mysql/logs
[root@duduhome opt]# touch /data/mysql/logs/mysql.log
给所有mysql目录权限:
[root@duduhome opt]# chown mysql. -R /data/mysql
给日志文件写、执行权限:
[root@duduhome opt]# chmod 755 /data/mysql/logs/mysql.log
剩下的到时在启动的时候,按它提示的错误信息来处理
4、修改mysql配置文件
[root@duduhome opt]# vim /etc/my.cnf
[mysqld]
server-id=1
log-bin=mysql-bin
basedir=/usr/local/mysql
datadir=/data/mysql
port=3306
socket=/data/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
[mysqld_safe]
log-error=/data/mysql/logs/mysql.log
pid-file=/data/mysql/mysql.pid
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
5、初始化
[root@duduhome opt]# /usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/data/mysql/3306 --basedir=/usr/local/mysql
2020-05-14T07:11:31.872694Z 1 [Note] A temporary password is generated for root@localhost: ft.;QmEkK39j
出现上面的那个临时密码后,说明初始化成功没有问题了
如果出现 ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' 问题,一般就是在编译的时候,配置的参数与 my.cnf 配置文件里面的不一致所导致,直接 ln -s 把 mysql.socket 到 /tem/ 下即可
6、启动、重启、关闭等操作命令
启动:
[root@duduhome opt]# /usr/local/mysql/support-files/mysql.server start
重启:
[root@duduhome opt]# /usr/local/mysql/support-files/mysql.server restart
[root@duduhome opt]# /usr/local/mysql/support-files/mysql.server reload
停止:
[root@duduhome opt]# /usr/local/mysql/support-files/mysql.server stop
运行状态:
[root@duduhome opt]# /usr/local/mysql/support-files/mysql.server status
查看帮助:
[root@duduhome opt]# /usr/local/mysql/support-files/mysql.server
[root@duduhome opt]# /usr/local/mysql/support-files/mysql.server --help
[root@duduhome opt]# /usr/local/mysql/support-files/mysql.server -h
7、给网站创建数据库
7.1、连接数据库
先修改my.cnf配置文件,让其能空命令登录mysql,否则会报错:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
[root@www_1 ~]# vim /etc/my.cnf
在 [mysqld] 的最后一行加上一句:“skip-grant-tables
”
然后保存,在重启下 mysql 即可正常连接到数据库
[root@www_1 ~]# /usr/local/mysql/support-files/mysql.server restart
[root@www_1 ~]# /usr/local/mysql/bin/mysql
修改密码:
mysql> update mysql.user set authentication_string=password("WS5mNoir69vEN!H6iw") where user="root";
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 1
ysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql>
测试下用密码是否可以登录上Mysql:
mysql> quit;
Bye
[root@www_1 ~]# /usr/local/mysql/bin/mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.28
mysql>
登录成功!!!
这个时候要修改新的密码,否则下次登录进Mysql后,在创建表之类的就会出现 “ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statemen”的错误
重新修改密码:
mysql> alter user 'root'@'localhost' identified by '&E83fcl1Al#NvnqF';
Query OK, 0 rows affected (0.00 sec)
mysql>
7.2、创建wordpress网站使用的数据库
连接数据库:
[root@www_1 ~]# /usr/local/mysql/bin/mysql -uroot -p
mysql>
创建数据库:
mysql> create database ddhome charset=utf8;
Query OK, 1 row affected (0.00 sec)
授权网站连接:
mysql> grant all on ddhome.* to "wordpress"@xx.xxx.84.194 identified by "P&rQ4$scC#5Cujxr";
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql>