Nginx部署与lnmp的部署
Nginx 简介
基本介绍
类型:轻量级Web服务器/反向代理服务器/电子邮件代理服务器
开发者:俄罗斯程序设计师Igor Sysoev
首次发布:2004年10月4日(版本0.1.0)
许可证:类BSD许可证
主要用户:百度、京东、新浪、网易、腾讯、淘宝等
核心特点
1.占用内存少
2.并发能力强
3.稳定性高
4.资源消耗低
Nginx 特性与优点
主要特性
- 支持高达5万并发连接数
- 使用epoll和kqueue作为开发模型
- 支持负载均衡和HTTP代理
- 采用C语言编写,性能高效
Nginx 功能与应用
基本功能
1.静态资源Web服务器
2.HTTP/SMTP/POP3反向代理
3.缓存加速和负载均衡
4.支持FastCGI、uWSGI等
5.模块化过滤器
6.SSL支持
扩展功能
基于名称和IP的虚拟主机,Keepalive支持,平滑升级,定制访问日志,URL,重写和路径别名,访问控制和速率限制
应用场景
- 结合FastCGI运行PHP、JSP、Perl
- 反向代理和负载均衡
- 静态HTML网页和图片服务
- 新技术结合应用
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
查看页面
