关于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即可
在这里插入图片描述
在这里插入图片描述

Logo

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

更多推荐