54.Nginx部署与lnmp的部署

Nginx部署与lnmp的部署

Nginx 简介

基本介绍

类型:轻量级Web服务器/反向代理服务器/电子邮件代理服务器

开发者:俄罗斯程序设计师Igor Sysoev

首次发布:2004年10月4日(版本0.1.0)

许可证:类BSD许可证

主要用户:百度、京东、新浪、网易、腾讯、淘宝等

核心特点

1.占用内存少

2.并发能力强

3.稳定性高

4.资源消耗低

Nginx 特性与优点

主要特性
  1. 支持高达5万并发连接数
  2. 使用epoll和kqueue作为开发模型
  3. 支持负载均衡和HTTP代理
  4. 采用C语言编写,性能高效

Nginx 功能与应用

基本功能

1.静态资源Web服务器

2.HTTP/SMTP/POP3反向代理

3.缓存加速和负载均衡

4.支持FastCGI、uWSGI等

5.模块化过滤器

6.SSL支持

扩展功能

基于名称和IP的虚拟主机,Keepalive支持,平滑升级,定制访问日志,URL,重写和路径别名,访问控制和速率限制

应用场景
  1. 结合FastCGI运行PHP、JSP、Perl
  2. 反向代理和负载均衡
  3. 静态HTML网页和图片服务
  4. 新技术结合应用

Nginx 模块与工作原理

按结构分类:
  • 核心模块:HTTP模块、EVENT模块、MAIL模块
  • 基础模块:HTTP Access、FastCGI、Proxy、Rewrite
  • 第三方模块:用户自定义开发
按功能分类:
  • Handlers:直接处理请求
  • Filters:修改输出内容
  • Proxies:服务代理和负载均衡

工作原理

进程架构:
  • Master进程:管理worker进程,不处理请求
  • Worker进程:处理网络事件,多个worker平等工作
连接处理:
  • 使用accept_mutex避免惊群现象
  • 每个worker有独立连接池
  • 最大连接数 = worker_connections × worker_processes

nginx部署

部署前需要关闭防火墙和selinux

创建nginx用户

复制代码
[root@nginx ~]# useradd -r -M -s /sbin/nologin nginx
[root@nginx ~]# id nginx
uid=987(nginx) gid=981(nginx) groups=981(nginx)

使用本地yum源安装工具包

复制代码
[root@nginx ~]# yum -y groupinstall "Development Tools"

使用网络yum源安装依赖包

复制代码
[root@nginx ~]# yum -y install pcre-devel openssl openssl-devel gd-devel gcc gcc-c++ make zlib-devel wget lrzsz

创建日志存放目录

复制代码
[root@nginx ~]# mkdir -p /var/log/nginx
[root@nginx ~]# chown -R nginx.nginx /var/log/nginx   #更改所有者和所属组

安装nginx

复制代码
[root@nginx ~]# tar -zxvf nginx-1.24.0.tar.gz -C /usr/local/
[root@nginx ~]# cd /usr/local/nginx-1.24.0/
[root@nginx nginx-1.24.0]# ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-debug \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_image_filter_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_stub_status_module \
--http-log-path=/var/log/nginx/access.log \
--error-log-path=/var/log/nginx/error.log
[root@nginx nginx-1.24.0]# make
[root@nginx nginx-1.24.0]#  make install

安装后配置环境变量

复制代码
[root@nginx nginx-1.24.0]# echo 'export PATH=/usr/local/nginx/sbin:$PATH' > /etc/profile.d/nginx.sh
[root@nginx nginx-1.24.0]# . /etc/profile.d/nginx.sh

首先停止nginx

复制代码
[root@nginx conf]# nginx -s stop

然后将nginx.conf和mime.types复制到/opt目录下

复制代码
[root@nginx conf]# cp nginx.conf /opt/
[root@nginx conf]# cp mime.types /opt/
[root@nginx conf]# nginx -c /opt/nginx.conf
[root@nginx conf]# nginx -c /opt/nginx.conf -s stop

nginx常用命令

复制代码
nginx                    # 启动服务
nginx -s stop           # 停止服务
nginx -s reload         # 重载配置
nginx -t                # 检查配置语法
nginx -v				#nginx的版本

部署lnmp

Nginx 192.168.100.10
Mysql 192.168.100.20
Php 192.168.100.30

部署前关闭防火墙和selinux

用源码编译安装mysql

复制代码
#部署mysql
echo "正在创建mysql用户...."
id mysql &>/dev/null
if [ $? -eq 0 ];then
        echo "mysql用户已存在"
else
        useradd -r -M -s /sbin/nologin mysql
        echo "mysql用户已创建"
fi

echo "正在安装依赖包...."
yum -y install libncurses* &>/dev/null
echo "依赖包已安装"

echo "正在配置mysql...."
cd /root
tar -xzvf mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz -C /usr/local &>/dev/null
#创建软连接
ln -s /usr/local/mysql-5.7.37-linux-glibc2.12-x86_64 /usr/local/mysql
mkdir -p /opt/data
#更改mysql所有者和所有组
chown -R mysql.mysql /usr/local/mysql
chown -R mysql.mysql /opt/data
echo "mysql配置完成"

echo "正在初始化数据库...."
/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --datadir=/opt/data/ &>/dev/null
ln -s /usr/local/mysql/include/ /usr/local/include/mysql
echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf
ldconfig
echo "数据库初始化完成"

echo "正在编辑mysql配置文件...."
cat > /etc/my.cnf << EOF
[mysqld]
basedir = /usr/local/mysql
datadir = /opt/data
socket = /tmp/mysql.sock
port = 3306
pid-file = /opt/data/mysql.pid
user = mysql
skip-name-resolve
EOF
sed -ri "s#^(basedir=).*#\1/usr/local/mysql#g" /usr/local/mysql/support-files/mysql.server
sed -ri "s#^(datadir=).*#\1/opt/data#g" /usr/local/mysql/support-files/mysql.server
echo "配置完成"

echo "配置mysqld服务的单元文件..."
cat > /usr/lib/systemd/system/mysqld.service << EOF
[Unit]
Description=mysql server daemon
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/mysql/support-files/mysql.server start
ExecStop=/usr/local/mysql/support-files/mysql.server stop
ExecReload=/bin/kill -HUP \$MAINPID

[Install]
WantedBy=multi-user.target
EOF
echo "配置完成"
echo "启动mysql服务"
systemctl daemon-reload &>/dev/null
systemctl enable --now mysqld &>/dev/null

echo "正在给mysql配置环境变量"
echo 'export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
echo "配置完成"
source /etc/profile

echo "给数据库设置密码"
read -p "请给数据库输入密码:" PASSWORD
mysql -uroot -e "set password=password('$PASSWORD')"
echo "数据库部署完成"

配置mysql

复制代码
[root@mysql ~]# vim /etc/man_db.conf

MANDATORY_MANPATH                       /usr/man
MANDATORY_MANPATH                       /usr/share/man
MANDATORY_MANPATH                       /usr/local/share/man
MANDATORY_MANPATH                       /usr/local/mysql/man

[root@mysql ~]# vim /etc/ld.so.conf.d/mysql.conf

/usr/local/mysql/lib
部署php

(网络yum源)

安装依赖包

复制代码
[root@php ~]# yum -y install libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl-devel libicu-devel libjpeg libjpeg-devel libpng libpng-devel openldap-devel pcre-devel freetype freetype-devel gmp gmp-devel  readline readline-devel libxslt libxslt-devel  php-mysqlnd

安装php源

复制代码
[root@php yum.repos.d]# yum -y install https://rpms.remirepo.net/enterprise/remi-release-7.rpm

[root@php yum.repos.d]# ls
CentOS-Base.repo   remi-php71.repo  remi-php82.repo
epel.repo          remi-php72.repo  remi-php83.repo
epel-testing.repo  remi-php73.repo  remi.repo
remi-modular.repo  remi-php74.repo  remi-safe.repo
remi-php54.repo    remi-php80.repo
remi-php70.repo    remi-php81.repo

[root@php yum.repos.d]# yum-config-manager --enable remi-php70

安装php

复制代码
[root@php yum.repos.d]# yum -y install php php-cli php-fpm php-mysqlnd php-zip php-devel php-gd php-mbstring php-curl php-xml php-pear php-bcmath php-json php-redis

配置php

复制代码
[root@php yum.repos.d]# vim /etc/php-fpm.d/www.conf
listen = 0.0.0.0:9000
listen.allowed_clients = 192.168.100.10

生成测试页面

复制代码
[root@php yum.repos.d]# vim /var/www/html/index.php

<?php
        phpinfo();
?>
[root@php ~]# chown -R apache.apache /var/www/html/
[root@php ~]# systemctl restart php-fpm
[root@php ~]# systemctl enable php-fpm

在nginx上修改配置

复制代码
[root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf

location / {
            root   html;
            index  index.php index.html index.htm;
        }

        location ~ \.php$ {
            root           /var/www/html;
            fastcgi_pass   192.168.100.30:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /var/www/html/$fastcgi_script_name;
            include        fastcgi_params;
        }

测试nginx配置文件

复制代码
[root@nginx ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

重启nginx

复制代码
[root@nginx ~]# nginx  -s stop
[root@nginx ~]# nginx

查看页面

相关推荐
岚天start4 小时前
Nginx配置中location和proxy_pass指令尾部是否带斜杠的区别
运维·nginx·centos·proxy_pass·location·uri·斜杠
纳切威5 小时前
CentOS 10服务器版 部署Zabbix7.2 server端
linux·运维·centos·zabbix
祐言QAQ5 小时前
(超详细,于25年更新版) VMware 虚拟机安装以及Linux系统—CentOS 7 部署教程
linux·运维·服务器·c语言·物联网·计算机网络·centos
华纳云IDC服务商5 小时前
服务器机械硬盘能支撑高并发流媒体吗?
运维·服务器·媒体
再难也得平5 小时前
Docker基础与项目部署
运维·docker·容器
IT北辰6 小时前
Linux 系统python环境( Miniconda),最新版
linux·运维·python
shylyly_6 小时前
Linux-> UDP 编程3
linux·运维·网络协议·udp·bind·cs·聊天室程序
阿方索7 小时前
DHCP 服务器
linux·运维
用户51681661458417 小时前
使用[DeepSeek]快速定位nginx前端部署后报错:500 Internal Server Error nginx/1.29.1
nginx·deepseek