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

查看页面

相关推荐
Danileaf_Guo2 小时前
256台H100服务器算力中心的带外管理网络建设方案
运维·服务器
云老大TG:@yunlaoda3603 小时前
华为云国际站代理商IMS主要有什么作用呢?
tcp/ip·华为云·云计算·负载均衡
拾贰_C4 小时前
【Linux | Windows | Terminal Command】 Linux---grep | Windows--- findstr
linux·运维·服务器
虹科网络安全5 小时前
艾体宝洞察 | 利用“隐形字符”的钓鱼邮件:传统防御为何失效,AI安全意识培训如何补上最后一道防线
运维·网络·安全
石像鬼₧魂石5 小时前
Kali Linux 网络端口深度扫描
linux·运维·网络
alengan5 小时前
linux上面写python3日志服务器
linux·运维·服务器
Evan芙6 小时前
搭建nexus服务,实现本地仓库、代理仓库
java·nginx·tomcat
yBmZlQzJ6 小时前
免费内网穿透-端口转发配置介绍
运维·经验分享·docker·容器·1024程序员节
JH30736 小时前
docker 新手入门:10分钟搞定基础使用
运维·docker·容器
小卒过河01047 小时前
使用apache nifi 从数据库文件表路径拉取远程文件至远程服务器目的地址
运维·服务器·数据库