专栏:Nginx实战进阶指南
说明:后续会在这个专栏上分享大量实战生产经验,实现由浅入深,逐步分析,每个项目上都带有实战内容,整个包括部署,实战,优化经验,以及各种疑难杂症和面试经验,如果您是初学者,请订阅专栏,以便接收最新文章。
LNMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写。L指Linux,N指Nginx,M一般指MySQL,也可以指MariaDB,P一般指PHP,也可以指Perl或Python。
目录
一、LNMP环境介绍
1.1 环境介绍
LNMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写。L指Linux,N指Nginx,M一般指MySQL,也可以指MariaDB,P一般指PHP,也可以指Perl或Python。
二、部署L+N+P
2.1 Nginx服务部署
2.1.1 安装包下载与部署
tar zxvf nginx-1.15.3.tar.gz
cd nginx-1.15.3
yum -y install openssl openssl-devel pcre pcre-devel zlib zlib-devel
./configure --prefix=/usr/local/nginx --with-http_v2_module --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module
make
make install
mkdir /usr/local/nginx/conf/vhosts
rm -rf /usr/local/nginx/logs
mkdir -p /data/logs/nginx
chmod 755 /data/logs/nginx
ln -s /data/logs/nginx /usr/local/nginx/logs
echo '/usr/local/nginx/logs/*.log {
daily
dateext
missingok
rotate 10
nocompress
create 644 root root
sharedscripts
postrotate
/usr/local/nginx/sbin/nginx -s reload 2> /dev/null || true
endscript
}' > /etc/logrotate.d/nginx
echo '/usr/local/nginx/sbin/nginx' >> /etc/rc.d/rc.local
2.1.2 修改配置文件与验证:
- 编辑日志格式
- 服务启动用户
user 51xue;
log_format main '[$time_local] [$remote_addr] [$COOKIE_userid] [$request] [$status]
[$body_bytes_sent] [$http_referer] [$http_user_agent] [$http_x_forwarded_for] [$request_time] [$upstream_addr] [$upstream_response_time] [$http_host] [$request_body] [$uri] [$server_port] [$remote_user] [-]';
use epoll;
2.2 php-fpm部署
2.2.1 加载库文件
下载:https://www.php.net/distributions/php-7.1.30.tar.gz
扩展:wget https://hqidi.com/big/libzip-1.2.0.tar.gz
echo '/usr/local/lib64'>>/etc/ld.so.conf
echo '/usr/local/lib'>>/etc/ld.so.conf
echo '/usr/lib'>>/etc/ld.so.conf
echo '/usr/lib64'>>/etc/ld.so.conf
ldconfig -v
wget https://hqidi.com/big/libzip-1.2.0.tar.gz
tar -zxvf libzip-1.2.0.tar.gz
cd libzip-1.2.0
./configure
make && make install
2.2.2 处理依赖情况
yum -y install gcc gcc-c++ openssl openssl-devel
yum install -y libtool zlib zlib-devel
cp /usr/local/lib/libzip/include/zipconf.h /usr/local/include/zipconf.h
yum install -y libpng libpng-devel
yum install -y libjpeg libjpeg-devel
yum install -y freetype freetype-devel postgresql-devel
yum install -y libxml2 libxml2-devel
yum install -y libcurl libcurl-devel
yum install -y libjpeg libjpeg-devel
2.2.3 安装php服务
cd /usr/local/src/
tar zxvf php-7.1.30.tar.gz
cd php-7.1.30
#./configure --prefix=/usr/local/php7 --with-config-file-path=/usr/local/php7/etc --with-mysqli=mysqlnd --with-freetype-dir --with-jpeg-dir --with-png-dir --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-fpm --enable-mbstring --with-gd --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --with-pdo-mysql --with-pdo-pgsql --enable-zip --enable-soap --enable-opcache
./configure --prefix=/usr/local/php7 --with-config-file-path=/usr/local/php7/etc --enable-fpm --with-mysqli=mysqlnd --with-pdo-mysql
重点关注如下模块:
--with-mysqli=mysqlnd
--enable-fpm
--enable-opcache:OPcache通过将PHP脚本预编译的字节码存储到共享内存中来提升PHP的性能,存储预编译字节码的好处就是省去了每次加载和解析PHP脚本的开销。
make
make install
2.2.4 修改配置文件:
如果sed命令不会,就直接到配置文件改。
sed语法:sed -i 's/元数据//g' 文件
cp -f sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm7
chmod +x /etc/init.d/php-fpm7
ln -sf /usr/local/php7/bin/php /usr/bin/php7
cp php.ini-development /usr/local/php7/etc/php.ini
sed -i 's/^;error_log = php_errors.log/error_log = \/usr\/local\/nginx\/logs\/php_errors7.log/' /usr/local/php7/etc/php.ini
sed -i 's/^;date.timezone =/date.timezone = "Asia\/Shanghai"/' /usr/local/php7/etc/php.ini
sed -i 's/^error_reporting = E_ALL/error_reporting = E_ALL \& ~E_NOTICE/' /usr/local/php7/etc/php.ini
sed -i 's/^expose_php = On/expose_php = Off/g' /usr/local/php7/etc/php.ini
sed -i 's/short_open_tag = Off/short_open_tag = On/' /usr/local/php7/etc/php.ini
sed -i 's/^serialize_precision = -1/serialize_precision = 17/' /usr/local/php7/etc/php.ini
sed -i 's/^display_errors = On/display_errors = Off/' /usr/local/php7/etc/php.ini
sed -i 's/^display_startup_errors = On/display_startup_errors = Off/' /usr/local/php7/etc/php.ini
sed -i 's/^track_errors = On/track_errors = Off/' /usr/local/php7/etc/php.ini
sed -i 's/^html_errors = On/html_errors = Off/' /usr/local/php7/etc/php.ini
echo 'zend_extension = opcache.so
opcache.force_restart_timeout = 3600
opcache.memory_consumption = 1024
opcache.optimization_level = 1
opcache.interned_strings_buffer = 8
opcache.max_accelerated_files = 4096
opcache.revalidate_freq = 60
opcache.fast_shutdown = 1
opcache.enable = 0
opcache.enable_cli = 0' >> /usr/local/php7/etc/php.ini
2.2.5 启动配置文件
sed -i 's/php_fpm_PID=\${prefix}\/var\/run\/php-fpm.pid/php_fpm_PID=\/var\/run\/php-fpm7.pid/' /etc/init.d/php-fpm7
- fpm配置文件:
cat /usr/local/php7/etc/php-fpm.conf
[global]
pid = /var/run/php-fpm7.pid
error_log = /usr/local/nginx/logs/php-fpm7.log
log_level = notice
[www]
listen = /dev/shm/phpfpm7.socket
user = 51xue
group = 51xue
listen.owner = 51xue
listen.group = 51xue
listen.mode = 0660
listen.backlog = 10240
pm = static
pm.max_children = 150
pm.start_servers = 10
pm.min_spare_servers = 50
pm.max_spare_servers = 150
pm.max_requests = 20000
request_slowlog_timeout = 2
request_terminate_timeout = 10
slowlog = /usr/local/nginx/logs/fpm_slow7.log
2.2.6 php-fpm相关命令
fpm的重启操作不是restart,reload等命令,而是使用信号控制:
master进程可以理解以下信号
- INT, TERM 立刻终止
- QUIT 平滑终止
- USR1 重新打开日志文件
- USR2 平滑重载所有worker进程并重新载入配置和二进制模块
- kill -USR2 42891
- 以进程pid作为重启依据
- php-fpm 关闭:
- kill -INT `cat /var/run/php-fpm7.pid`
- php-fpm 重启:
- kill -USR2 `cat /var/run/php-fpm7.pid`
三、部署Mysql
3.1 数据库服务部署
3.1.1 部署服务
官网:wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz
mv /usr/local/src/mysql-5.7.27-linux-glibc2.12-x86_64 /usr/local/mysql
mkdir -p /data/mysql
mkdir -p /data/log
chown mysql:mysql -R /data/mysql
chown mysql:mysql -R /data/log
3.1.2 配置文件
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
user=mysql
symbolic-links=0
server-id=3
log-bin=mysql-bin
long_query_time = 2
slow-query-log-file = /data/mysql/51xue-53-slow.log
max_connections=50
max_connect_errors=50
innodb_buffer_pool_size=1024450924
[mysqld_safe]
log-error=/data/log/mysqld.log
pid-file=/data/mysql/mysqld.pid
[client]
port=3306
socket=/data/mysql/mysql.sock
3.1.3 初始化与启动
/usr/local/mysql/bin/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
#/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &
/etc/init.d/mysql start
3.1.4 登录与修改密码
cat /root/.mysql_secret
# Password set for user 'root@localhost' at 2021-06-05 00:24:07
sdk3.a8Xb4jg
mysql -uroot -p'sdk3.a8Xb4jg‘
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass');
flush privileges
四、【实战】部署wordpress服务
php的开源项目站点:php开源项目网 | php开源项目 php开源大全 php开源框架 php开源系统 php开源码
WordPress:Download – WordPress.org
WordPress 是一种使用 PHP 语言和 MySQL 数据库开发的开源、免费的 Blog(博客,网志)引擎,用户可以在支持 PHP 和 MySQL 数据库的服务器上建立自己的 Blog。
WordPress 是一个功能非常强大的博客系统,插件众多,易于扩充功能。安装和使用都非常方便。目前 WordPress 已经成为主流的 Blog 搭建平台。
4.1 wordpress服务调试
4.1.1 下载安装
https://cn.wordpress.org/latest-zh_CN.tar.gz
解压后mv到 /var/www/html/目录下
ll /var/www/html/
total 4
drwxr-xr-x 5 mysql mysql 4096 May 19 21:36 wordpress
cp wp-config-sample.php wp-config.php
chown 51xue:51xue ./wordpress -R
4.1.2 修改配置
文件:/var/www/html/wordpress/wp-config.php
define( 'DB_NAME', 'wordpress' );
/** MySQL database username */
define( 'DB_USER', 'root' );
/** MySQL database password */
define( 'DB_PASSWORD', '51xue' );
/** MySQL hostname */
define( 'DB_HOST', '127.0.0.1' );
/** Database Charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8' );
/** The Database Collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );
4.1.3 数据库授权
create database wordpress;
grant select,delete,update,insert on *.* to root@127.0.0.1 identified by '51xue';
flush privileges;
4.1.4 前端服务层配置
server {
server_name www.51xuesf.com.cn;
access_log logs/51xuez.access.log main;
error_log logs/51xuez.error.log;
index index.html index.php index.htm;
root /usr/local/nginx/;
location / {
root /var/www/html/;
index index.html index.php index.htm;
}
location ~ \.php$ {
root /var/www/html/;
fastcgi_pass unix:/dev/shm/phpfpm7.socket;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /usr/local/nginx/conf/fastcgi_params;
}
location ~* /(png|txt|jpg|js)/ {
root /var/www/html/s/;
expires 0m;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
add_header Access-Control-Allow-Origin *;
charset utf-8;
proxy_set_header Host www.51xuesb.com;
proxy_pass http://51xues_backend;
}
}
4.1.5 修改hosts
C:\Windows\System32\drivers\etc
1.1.6 安装接口:
http://wordpress.51xue.com/wordpress/wp-admin/setup-config.php
如果配置文件没有填写:
如果有配置配置文件
五、Nginx与php-fpm的调用方式
5.1 方式1:fpm配置1
/usr/local/php/etc/php-fpm.conf
listen = /dev/shm/phpfpm7.socket
nginx调用fpm配置1
location ~ \.php$ {
root /var/www/html/;
fastcgi_pass unix:/dev/shm/phpfpm7.socket;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /usr/local/nginx/conf/fastcgi_params;
}
5.2 方式2:fpm配置2
/usr/local/php/etc/php-fpm.conf
listen = 127.0.0.1:9000
nginx调用fpm配置2
location ~ \.php$ {
root /var/www/html/;
fastcgi_pass unix:/127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /usr/local/nginx/conf/fastcgi_params;
}