Nginx服务基础

本文介绍Nginx的特性与配置,包括安装、运行控制、虚拟主机搭建及性能优化。同时,深入探讨LNMP(Linux+Nginx+MySQL+PHP)架构的部署流程,涵盖MySQL数据库、PHP环境的编译安装与配置,以及Nginx支持PHP的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Nginx 服务介绍

Nginx是一款高性能、轻量级Web服务软件,
优点是:稳定性高、系统资源消耗低、对HTTP并发连接的处理能力高(单台物理服务器可支持30 000~50 000个并发请求)

Nginx 配置文件

#全局配置
#user  nobody; 
worker_processes  1;					//工作进程数
#error_log  logs/error.log;				//错误日志文件存放位置
pid logs/nginx.pid;						//PID文件的位置

#环境配置(I/O事件配置)
events {
    use epoll;						//使用epoll模型
    worker_connections  4096; 		//每个进程的连接数
}

#HTTP配置
http {
    ......
   # access_log  logs/access.log  main; 
    sendfile        on;
    ......
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  www.bt.com;
        charset utf-8;
        location / {
            root   html;
            index  index.html index.php; }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html; }}
}

Nginx 安装及运行控制

Nginx安装过程

yum install -y gcc gcc-c++ automake pcre pcre-devel zlip zlib-devel
openssl openssl-devel
  • 解压缩
tar zxf nginx-1.12.2.tar.gz -C /usr/src/
  • 创建 nginx 用户组
useradd -M -s /sbin/nologin nginx
  • 编译安装nginx
cd /usr/src/
cd nginx-1.12.2/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx\
--with-http_stub_status_module	
echo $?
0
make && make install
echo $?
0
  • 优化路径(创建软链接)
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
  • 启动Nginx
    通过 /usr/local/sbin/nginx 启动
nginx

ss -lntp | grep nginx

LISTEN     0      128          *:80           *:*      
 users:(("nginx",pid=11754,fd=8),
 ("nginx",pid=11753,fd=8),("nginx",pid=11752,fd=8))

  • nginx 运行控制
    • nginx 启动
    • killall -s HUB nginx 重载nginx
    • killall -s QUIT nginx 优雅的关闭nginx
      killall 命令
      Linux系统中的killall命令用于杀死指定名字的进程(kill processes by name)。我们可以使用kill命令杀死指定进程PID的进程,如果要找到我们需要杀死的进程,我们还需要在之前使用ps等命令再配合grep来查找进程,而killall把这两个过程合二为一,是一个很好用的命令。
命令格式: killall [参数] [进程名]
命令参数:
-l  信号,若果不加信号的编号参数,则使用“-l”参数会列出全部的信号名称
-a  当处理当前进程时,不限制命令名和进程号的对应关系
-p  指定kill 命令只打印相关进程的进程号,而不发送任何信号
-s  指定发送信号
-u  指定用户
常用的信号:
HUP    1    终端断线
INT     2    中断(同 Ctrl + C)
QUIT    3    退出(同 Ctrl + \)
TERM   15    终止
KILL    9    强制终止
CONT   18    继续(与STOP相反, fg/bg命令)
STOP    19    暂停(同 Ctrl + Z)
  • 还可以通过:nginx -s [参数] 实现服务的重载、关闭
nginx -c /path/to/nginx.conf  // 以特定目录下的配置文件启动nginx:
nginx -s  reload  // 修改配置后重新加载生效
nginx -s  reopen   // 重新打开日志文件
nginx -s stop  // 快速停止nginx
nginx -s quit  // 完整有序的停止nginx
nginx -t     // 测试当前配置文件是否正确

添加系统服务

将Nginx添加系统服务,通过systemctl命令控制Nginx服务

  • 添加系统服务示例
vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
#声明启动顺序,在network服务之后启动
After=network.target remote-fs.target nss-lookup.target
  
[Service]
#后台运行形式 forking:守护进程
Type=forking
#PID文件位置(记录nginx的进程号)
PIDFile=/usr/local/nginx/logs/nginx.pid
#指定nginx启动文件
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
#根据PID热重载配置
ExecReload=/bin/kill -s HUP $MAINPID
#根据PID中止进程
ExecStop=/bin/kill -s QUIT $MAINPID
#为服务创建独立的运行空间
PrivateTmp=true
  
[Install]
WantedBy=multi-user.target

添加754权限

chmod 754 /lib/systemd/system/nginx.service
nginx -s quit		//先退出
systemctl raedmon-reload	//刷新后
systemctl start nginx.service //再用systemctl程序启动nginx服务
systemctl enable nginx.service	//添加开机自启
  • 添加系统服务示例:Nginx服务脚本
vim /etc/init.d/nginx
#!/bin/bash
# chkconfig: - 99 20
# description:Nginx Service Control Script
PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
case "$1" in
  start)
	$PROG
	;;
  stop)
	kill -s QUIT $(cat $PIDF)
	;;
  restart)
	$0 stop
	$0 start
	;;
  reload)
	kill -s HUP $(cat $PIDF)
	;;
  *)
	echo "Usage: $0 {start|stop|restart|reload}"
	exit 1
esac
[root@localhost ~]# chmod +x /etc/init.d/nginx 
[root@localhost ~]# chkconfig --add nginx
[root@localhost ~]#nginx -s quit
[root@localhost ~]# systemctl start nginx.service 
[root@localhost ~]# systemctl status nginx.service

在这里插入图片描述

访问状态统计

Nginx内置了HTTP_STUB_STATUS状态统计模块,用来反馈当前的Web访问情况,配置编译参数时可添加–with-http_stub_status_module模块来启用此功能。
另外还需要修改配置文件:/usr/local/nginx/conf/nginx.conf

http {
    server {
        listen  80;
        server_name  www.fhy.com;
        charset utf-8;
        location / {
            root   html;
            index  index.html index.php;
		}
        location /status {
            stub_status   on;
            access_log off;
		}
	}
}

重启服务,访问status页面

在这里插入图片描述
其中“Active connections”表示当前的活动连接数(1);“server accepts handled requests”表示已经处理的连接信息,三个数字依次表示已处理的连接数(6)、成功的TCP握手次数(6)、已处理的请求数(6)

Nginx访问控制

基于授权的访问控制

  • 使用htpasswd命令生成用户密码认证文件
    yum安装httpd-tools
[root@localhost ~]# htpasswd -c /usr/local/nginx/passwd.db admin		
New password: 		//键入密码
Re-type new password: 
Adding password for user test
[root@www nginx]# cat passwd.db 
admin:$apr1$c2YTCr8e$z4IfvYCf50jR5fAZdfbhL0
[root@www nginx]#
  • 修改密码文件的权限为400,将所有着改为nginx,设置nginx的运行用户能够读取。
    -[root@www ~]# chmod 400 /usr/local/nginx/passwd.db [root@www ~]# chown nginx /usr/local/nginx/passwd.db [root@www ~]# ll -d /usr/local/nginx/passwd.db -r--------. 1 nginx root 42 9月 21 03:25 /usr/local/nginx/passwd.db
  • 修改主配置文件对相应目录,添加认证配置项
    vi /usr/local/nginx/conf/nginx.conf
    在这里插入图片描述
    auth_basic“secret”; //添加认证配置
  • 检查语法,重启服务,访问测试
    在这里插入图片描述
    在这里插入图片描述

基于客户端的访问控制

  • 基于客户端的访问控制是通过客户端IP地址,来决定是否允许对页面访问。
    它的配置规则
    • deny IP/IP段:拒绝某个IP或IP段的客户端访问
    • allow IP/IP段:允许某个IP或IP段的客户端访问
      规则从上往下执行,如匹配则停止,不再往下匹配
  • 配置步骤
    • 修改配置文件,添加如下项
      在这里插入图片描述
    • 重启服务,访问网页
      在这里插入图片描述

Nginx虚拟主机

基于域名的虚拟主机构建

构建2个虚拟Web站点www.zzq.com,www.25zzq.com IP地址均为 192.168.137.102

  • 修改Windows客户机的hosts文件
    在这里插入图片描述
  • 为各个网站准备网页文档和网页根目录
[root@www ~]# mkdir -p /var/www/html/zzq/
[root@www ~]# mkdir -p /var/www/html/25zzq/
[root@www ~]# echo zzq > /var/www/html/zzq/index.html
[root@www ~]# echo 25zzq > /var/www/html/25zzq/index.html
  • 修改nginx配置文件,把配置文件中的server{}代码全部清掉,然后加入两个新的server{}段,对应到两个域名。
[root@www can]# vim /usr/local/nginx/conf/nginx.conf
…
   server {
        listen       80;
        server_name  www.zzq.com;
        charset utf-8;
        access_log logs/www.zzq.com.access.log;
        location / {
            root /var/www/html/zzq;
            index  index.html index.php;
       }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        }
        server {
        listen       80;
        server_name  www.25zzq.com;
        charset utf-8;
        access_log logs/www.25zzq.com.access.log;
        location / {
            root /var/www/html/25zzq;
            index  index.html index.php;
       }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        }
  • 重启nginx服务
  • 客户机验证

在这里插入图片描述
在这里插入图片描述

基于IP的虚拟主机构建

构建2个虚拟Web站点www.zzq.com,www.25zzq.com IP地址分别为 :192.168.137.102,192.168.137.103
在浏览器中访问这两个域名时,分别显示不同的内容
个域名时,分别显示不同的内容
和基于域名类似,将server{}字段中的servername分别改为IP地址的形式

server { 
        listen       192.168.137.102:80; 
        server_name  192.168.137.102:80; 
        ......}
server { 
        listen       192.168.137.103:80;
        server_name  192.168.137.103:80;
......}

基于端口号的虚拟主机构建

构建2个虚拟Web站点www.zzq.com,www.25zzq.com IP地址分别为 :192.168.137.102:80,192.168.137.102:8080
在浏览器中访问这两个域名时,分别显示不同的内容

和基于域名类似,将server{}字段中的servername分别改为IP地址:端口号的形式
server {
listen 192.168.137.102:80;
server_name 192.168.137.102:80;
…}
server {
listen 192.168.137.102:8080;
server_name 192.168.137.102:8080;
…}

LNMP架构部署

编译安装MySQL数据库

  • 检查当前系统MySQL安装情况
    为了避免发生端口冲突、程序冲突等现象,应先查询MySQL软件的安装情况。在这里插入图片描述
  • 安装ncurses-devel(字符处理库)依赖包
    ncurses是字符终端下屏幕控制的基本库,在TTY下登录到主机上mysql需要的,所以依赖。
    通过yum安装
    yum -y install ncurses-devel
    
  • 编译安装cmake,mysql需要用cmake来编译
tar -xzf cmake-2.8.6.tar.gz
cd cmake-2.8.6
./configure
gmake && gmake install
  • 配置mysql
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/etc -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql //指定MySQL数据库的安装目录为/usr/local/mysql

-DSYSCONFDIR=/etc //指定初始化参数文件目录为/etc

-DDEFAULT_CHARSET=utf8 //指定默认使用的字符集编码为utf8国际通用编码

-DDEFAULT_COLLATION=utf8_general_ci //指定默认使用的字符集校对规则为utf8_general_ci (适用于UTF-8)

-DWITH_EXTRA_CHARSETS=all //指定额外支持的其他字符集编码

  • 编译、安装
make && make install
  • 安装后优化调整

    • 创建运行用户
    groupadd mysql				//创建组
    useradd -M -s /sbin/binnologin mysql -g mysql
    
    • 对数据库目录进行权限设置
    chown -R mysql:mysql /usr/local/mysql
    
    • 建立配置文件
    rm -rf /etc/my.cnf		//删除原来的/etc/my.conf文件
    cp support-files/my-default.cnf /etc/my.cnf	
    //拷贝数据库样本文件
    
    • 初始化数据库
    /usr/local/mysql/scripts/mysql_install_db --
    user=mysql  --basedir=/usr/local/mysql  --
    datadir=/usr/local/mysql/data/	 
     //以运行用户mysql的身份执行初始化脚本mysql_install_db,指定数据存放目录
    
    • 设置环境变量
    echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile		
    //方便在任何目录下使用MySQL命令,在/etc/profile设置环境变量
    . /etc/profile					//立即生效
    
  • 添加系统服务
    添加mysqld到系统服务:先将/support-files/mysql.server脚本文件拷贝到/etc/rc.d/init.d目录下,并改名为mysqld,然后设置可执权限,通过执行”chkconfig”命令将其添加为mysqld系统服务。
    就可以直接通过systemctl(stop、start、restart)工具控制 mysqld数据库服务了。

cp support-files/mysql.server /etc/rc.d/init.d/mysqld
chmod +x /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
  • 运行mysql
systemctl start mysqld

MySQL服务器默认通过TCP 3306端口提供服务。通过编辑/etc/my.conf配置文件中[mysqld]配置段的”port=3306”行,可以更改监听端口

  • 创建数据库用户
mysqladmin -u root -p password 123
mysql -u root -p
mysql>

安装php解析环境

  • yum安装PHP的依赖包
yum install -y linpng libpng-devel pcre pcre-devel libxml2-devel libjpeg-devel
  • 编译安装PHP
[root@www ~]# tar zxf php-5.5.38.tar.gz -C /usr/src/
[root@www ~]# cd /usr/src/php-5.5.38/
[root@www php-5.5.38]#./configure --prefix=/usr/local/php5 --with-gd --with-zlib --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-config-file-path=/usr/local/php5  --enable-mbstring --enable-fpm
[root@www php-5.5.38]# make && make install
  • 复制模板文件作为PHP的主配置文件
[root@www php-5.5.38]#cp /usr/src/php-5.5.38/php.ini-development /usr/local/php5/php.ini	
  • 修改php.ini配置

在这里插入图片描述

default_charset = ”utf-8”设置默认的字符集
file_upload = On允许通过PHP网页上传文件
upload_max_filesize = 2M允许上传的文件大小限制
max_file_uploads = 数量允许上传文件数量
post_max_size = 8M每次通过表单post提交的数据量限制
short_open_tag = On允许识别PHP短语法标记,即<?...?>

注:可以直接沿用默认配置,不做任何修改。

  • 添加ZendGuardLoader优化模块
    • 为了进一步提高PHP程序的执行效率,优化页面加载速度。
      首先将准备好的ZendGuardLoader优化模块拷贝到/usr/local/php5/lib/php/目录
      在这里插入图片描述
    • 然后编译PHP配置文件:vi /usr/local/php5/php.ini
      在这里插入图片描述
      zend_extension=/usr/local/php5/lib/php/ZendGuardLoader.so
      zend_loader.enable=1
      //添加加载及启用ZendGuardLoader模块

配置Nginx支持PHP环境

  • PHP-FPM模块配置
    FPM(FastCGI Process Manger,FastCGI进程管理器)模块,用来对PHP解析实例进行管理和优化解析效率。
    • 复制模板文件php-fpm.conf.default作为PHP-FPM的配置文件
      在这里插入图片描述

    • 修改php-fpm.conf配置文件

      	[root@www etc]# grep -v "^;" php-fpm.conf | grep -v "^$"
      	[global]
      	pid = run/php-fpm.pid			//
      
      	[www]
      	user = nginx
      	group = nginx
      	listen = 127.0.0.1:9000
      
      	pm = dynamic
      	pm.max_children = 50
      	pm.start_servers = 20
      	pm.min_spare_servers = 5
      	pm.max_spare_servers = 20
      
      	```
      
    • 启动PHP-FPM模块,进程使用9000端口

      [root@www bin]# ln -s /usr/local/php5/bin/* /usr/local/bin/			//软链
      [root@www bin]# ln -s /usr/local/php5/sbin/* /usr/local/sbin/
      

      在这里插入图片描述

    • 修改Nginx的启动脚本,在Nginx启动时把PHP-FPM模块也同时启动。

      #!/bin/bash
      # chkconfig: - 99 20
      # description:Nginx Service Control Script
      PROG="/usr/local/nginx/sbin/nginx"
      PIDF="/usr/local/nginx/logs/nginx.pid"
      PROG_FPM="/usr/local/sbin/php-fpm"
      PIDF_FPM="/usr/local/php5/var/php-fpm.pid"
      case "$1" in
       start)
      $PROG
      $PROG_FPM
      ;;
       stop)
      kill -s QUIT $(cat $PIDF)
      killall $PROG_FPM
      ;;
      restart)
      $0 stop
      $0 start
      ;;
       reload)
      kill -s HUP $(cat $PIDF)
      ;;
       *)
      echo "Usage: $0 {start|stop|restart|reload}"
      esac
      
      [root@www system]# chmod +x /etc/init.d/nginx 
      [root@www system]# chkconfig --add nginx
      [root@www system]# nginx -s stop
      nginx: [alert] kill(7957, 15) failed (3: No such process)
      [root@www system]# systemctl start nginx
      [root@www system]# ps -ef | grep php-fpm
      root      43952      1  0 17:26 ?        
      00:00:00 php-fpm: master process (/usr/local/php5/etc/php-fpm.conf)
      

      在这里插入图片描述

  • LNMP架构协同测试(与apache相似)
    • 测试PHP网页能否正确显示
    • 测试PHP网页能否访问MySQL数据库
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值