Linux CentOS7.9部署LNMP
关于Nginx
什么是nginx
Nginx是一款高性能、轻量级Web服务软件/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。
由俄罗斯的程序设计师Igor Sysoev所开发,官方测试nginx能够支支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定。
应用场景
http服务器
Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。
虚拟web主机
可以实现在一台服务器虚拟出多个网站。例如个人网站使用的虚拟主机。
反向代理,负载均衡
当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。
Nginx特点
高可靠:稳定性master进程管理调度请求分发到worker;worker进程响应请求 ;一master多worker
热部署:1.支持长时间运行不重启平滑升级 2.可以快速重载配置
高并发:单台物理服务器可支持30 000~50 000个并发请求,(epoll模型内核级)
响应快:尤其在处理静态文件上,响应速度很快
低消耗:cpu和内存1w个请求内存平平均使用在2-3MB
分布式支持:反向代理 七层负载均衡
Nginx下载
官方网址:http://nginx.org/
版本
Mainline version:Mainline 是 Nginx 目前主力在做的版本,可以说是开发版
Stable version:最新稳定版,生产环境上建议使用的版本
Legacy versions:历史的老版本的稳定版
基本环境规划
确认防火墙、selinux关闭
systemctl status firewalld
sestatus
确认网络环境
ip -4 a
配置镜像源
阿里云镜像源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
epel镜像源
curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
安装前置依赖
yum -y install gcc gcc-c++ pcre-devel zlib-devel openssl-devel perl-devel
创建LNMP源码包目录并将源码包放入该目录
源码包已随文上传
mkdir -pv /usr/locla/src/lnmp
cd /usr/local/src/lnmp
编译安装nginx
解压
cd /usr/local/src/lnmp
tar xf nginx-1.16.1.tar.gz
cd nginx-1.16.1
预编译
./configure --prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-stream ; echo $?
编译安装Nginx
make -j $(nproc) && make install ; echo $?
创建Nginx运行用户
useradd -M -s /sbin/nologin nginx
路径优化(目的是在任意位置执行nginx)
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

箭头指向的是源文件
配置文件语法检查(nginx.conf)
nginx -t

后者指定nginx主配置文件
启动nginx服务
nginx
修改worker数量尽量和CPU数量相等
vim /usr/local/nginx/conf/nginx.conf grep -ni worker_process /usr/local//nginx/conf/nginx.conf


nginx -t 检查配置文件语法
nginx -s reload 重载配置文件
pgrep nginx 查看名称为nginx的进程号
ps aux | greo nginx查看nginx进程信息
ps -efL | grep nginx 统计nginx进程数量

配置nginx服务脚本(CentOS7适用)
cat > /usr/lib/systemd/system/nginx.service<<'EOF'
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
chmod 700 /usr/lib/systemd/system/nginx.service
systemctl daemon-reload
systemctl start nginx
systemctl enable nginx
nginx配置文件
入门
配置文件nginx.conf主要分为三部分
全局配置
I/O事件配置
HTTP配置
备份配置文件
cp -av /usr/local/nginx/conf/nginx.conf /opt/nginx.conf.bak_20260610fanzc
微调了nginx配置文件
cat /usr/local/nginx/conf/nginx.conf
#1.用户信息
#user nobody;
user nginx
#2. 进程信息
#worker_processes 1;
worker_processes auto;
#3. 错误日志
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#4.进程启动后的PID
#pid logs/nginx.pid;
#5.events模块 连接数信息、大流量高并发的基础配置,默认每个work进程建立的连接数是1024个
events {
worker_connections 1024;
}
#6.http模块
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"';
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;
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
#7.server段,虚拟主机、服务器的配置
#location 一个server段{}可以包含多个location{}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$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;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
修改完配置文件后一定要检查语法
nginx -t
基于nginx域名的虚拟主机
目录结构设计
/usr/local/nginx/
├── vhosts/
│ ├── www.fanzc.com.conf
│ ├── img.fanzc.com.conf
│ └── api.fanzc.com.conf
cd /usr/local/nginx/
mkdir -pv vhosts
在配置文件中添加核心行
标准模板(可直接覆盖)
cat /usr/local/nginx/conf/nginx.conf
user nginx;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /usr/lcoal/nginx/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"';
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log warn;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
# ===============================
# ✅ 虚拟主机配置统一引入
# ===============================
include /usr/lcoal/nginx/vhosts/*.conf;
}
配置虚拟主机
cat > /usr/local/nginx/vhosts/www.fanzc.com.conf<<'EOF'
server {
listen 80;
server_name www.fanzc.com fanzc.com;
access_log /var/log/nginx/www.fanzc.com_access.log main;
error_log /var/log/nginx/www.fanzc.com_error.log warn;
root /data/www/fanzc;
index index.html index.htm;
location / {
try_files $uri $uri/ /index.html;
}
}
EOF
cat /usr/local/nginx/vhosts/www.fanzc.com.conf
cat > /usr/local/nginx/vhosts/img.fanzc.com.conf<<'EOF'
server {
listen 80;
server_name img.fanzc.com;
access_log off;
error_log /var/log/nginx/img.fanzc.com_error.log warn;
root /data/www/img;
index index.html;
location / {
try_files $uri $uri/ =404;
}
# 静态资源缓存
location ~* \.(jpg|jpeg|png|gif|ico|svg|webp)$ {
expires 30d;
add_header Cache-Control "public, immutable";
access_log off;
}
}
EOF
cat /usr/local/nginx/vhosts/img.fanzc.com.conf
ls -lhrt /usr/local/nginx/vhosts/*.conf
创建目录 & 重载 Nginx
创建 vhosts 目录
mkdir -pv /usr/local/nginx/vhosts
创建站点目录
mkdir -pv /data/www/{fanzc,img}
创建默认首页
cat > /data/www/fanzc/index.html<<'EOF'
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>www.fanzc.com</title>
<style>
body {
font-family: Arial, sans-serif;
background-color: #f5f7fa;
text-align: center;
padding-top: 100px;
}
.box {
display: inline-block;
padding: 40px 60px;
background: #ffffff;
border-radius: 8px;
box-shadow: 0 4px 10px rgba(0,0,0,.1);
}
h1 { color: #2f80ed; }
p { color: #555; }
</style>
</head>
<body>
<div class="box">
<h1>www.fanzc.com</h1>
<p>Nginx 虚拟主机配置成功 🎉</p >
<p>时间:<span id="t"></span></p >
</div>
<script>
document.getElementById("t").innerText = new Date().toLocaleString();
</script>
</body>
</html>
EOF
cat /data/www/fanzc/index.html
cat >/data/www/img/index.html<<'EOF'
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>img.fanzc.com</title>
<style>
body {
font-family: Arial, sans-serif;
background-color: #eef2f7;
text-align: center;
padding-top: 100px;
}
.box {
display: inline-block;
padding: 40px 60px;
background: #ffffff;
border-radius: 8px;
box-shadow: 0 4px 10px rgba(0,0,0,.1);
}
h1 { color: #27ae60; }
p { color: #555; }
</style>
</head>
<body>
<div class="box">
<h1>img.fanzc.com</h1>
<p>静态资源 / 图片站点已就绪 🚀</p >
<p>可用于 JS / CSS / 图片加速</p >
</div>
</body>
</html>
EOF
cat /data/www/img/index.html
修改权限
chown -R nginx:nginx /usr/local/nginx /data/www/
检查配置
nginx -t
重载(不停机)
nginx -s reload
若发生如下报错,跟着我操作即可
mkdir -p /var/log/nginx
chown -R nginx. /var/log/nginx
chmod -R 755 /var/log/nginx
nginx -t
systemctl start nginx
编辑Linux的hosts文件

编辑windows的hosts文件

在cmd上测试连通性

浏览器访问测试页
访问www.fanzc.com
访问img.fanzc.com
二进制安装MySQL
解压
cd /usr/local/src/lnmp
tar xf mysql-5.7.32-el7-x86_64.tar.gz
创建目录、运行用户并修改权限
mkdir -pv /data
useradd -M -s /sbin/nologin mysql
chown -R mysql:mysql /data
编辑my.cnf文件
cat >/etc/my.cnf <<'EOF'
[client]
socket = /data/mysql.sock
[mysql]
socket = /data/mysql.sock
#设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
socket = /data/mysql.sock
#跳过权限表校验
#skip-grant-tables
skip-name-resolve
#设置3306端口
port = 3306
#设置mysql的安装目录
basedir=/usr/local/mysql
#设置mysql数据库的数据的存放目录
datadir=/data/mysql
#允许最大连接数
max_connections=200
#服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
#创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
lower_case_table_names=1
max_allowed_packet=16M
EOF
cat /etc/my.cnf
初始化
cd /usr/local/mysql/bin
./mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql;echo $?
./mysql_ssl_rsa_setup --datadir=/data/mysql ; echo $?
创建mysql启停脚本
复制mysql服务脚本
cp -av /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
编辑脚本控制程序:
vim /etc/init.d/mysqld
#修改以下内容:指定程序运行命令和数据库存储目录。
basedir = /usr/local/mysql
datadir = /data/mysql

修改控制脚本执行权限
chmod +700 /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
service mysqld start
登录MySQL修改密码
之前初始化设定了空密码,所以使用以下方式登录
/usr/local/mysql/bin/mysql -uroot
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '1';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
重启数据库服务
service mysqld restart
Shutting down MySQL.. SUCCESS!
Starting MySQL. SUCCESS!
编译安装PHP
安装前置依赖
yum -y install libjpeg-turbo libjpeg-turbo-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel curl libcurl-devel openssl openssl-devel
解压
cd /usr/local/src/lnmp
tar xf php-7.3.9.tar.gz
cd php-7.3.9
预编译
./configure \
--prefix=/usr/local/php \
--with-mysql-sock=/data/mysql.sock \
--with-mysqli \
--with-zlib \
--with-curl \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-openssl \
--enable-fpm \
--enable-mbstring \
--enable-xml \
--enable-session \
--enable-ftp \
--enable-pdo \
--enable-tokenizer ; echo $?

编译安装
make -j `nproc` && make install ; echo $?

配置php-fpm
使用php-fpm管理php服务,有两个配置文件:
1.php.ini #默认php配置文件
2.php-fpm.conf #php-fpm相关的配置
启用php-fpm进程
cp -av /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
cp -av /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
cp -av /usr/local/src/lnmp/php-7.3.9/php.ini-development /usr/local/php/php.ini
添加启动服务
cp /usr/local/src/lnmp/php-7.3.9/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
chkconfig --add php-fpm
添加环境变量
echo 'PATH=/usr/local/php/bin:$PATH' >> /etc/profile
source /etc/profile
配置php.ini文件
vim /usr/local/php/php.ini
date.timezone = PRC (954行)
mysqli.default_socket = /data/mysql.sock (1188行)
启动php-fpm服务
service php-fpm start
ss - tulanp | grep php-fpm

nginx+php-fpm配置
grep -nvE '^$|#' /usr/local/nginx/conf/nginx.conf


测试
测试nginx+php

cat /data/www/fanzc/index.php
<?php
phpinfo();
?>
浏览器访问www.fanzc.com/index.php测试页面
测试nginx+php+mysql
cat > /data/www/fanzc/testdb.php<<'EOF'
<?php
$link=mysqli_connect('localhost','root','1');
if($link) echo "<h1>Success!!</h1>";
else echo "Fail!!";
?>
EOF
浏览器访问www.fanzc.com/testdb.php
部署wordpress
解压
cd /usr/local/src/lnmp/
unzip wordpress-5.6-zh_CN.zip
将解压出来的内容复制到虚拟主机目录下并授权
cp -av wordpress/* /data/www/fanzc/
chmod -R 755 /data/www/fanzc/
chown -R nginx. /data/www/fanzc/
登录数据库创建wordpress相关数据库和管理员账号并授权
/usr/local/mysql/bin/mysql -uroot -p1
mysql> CREATE DATABASE wordpress_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Query OK, 1 row affected (0.07 sec)
mysql> CREATE USER 'wp_user'@'localhost' IDENTIFIED BY '1';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON wordpress_db.* TO 'wp_user'@'localhost';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
安装wordpress
浏览器访问www.fanzc.com/index.php

填入之前创建数据库的库名等信息即可
按照要求创建wp-config.php即可

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)