Nginx网站服务

        在各种网站服务器软件中,除了ApacheHTTPSenver外,还有一款轻量级的HTTP服务器软件——Nginx,由俄罗斯的lgorSysoev开发,其稳定、高效的特性逐渐被越来越多的用户认可。本章将讲解Nginx服务的基本构建、访问控制方式、虚拟主机的搭建,还有应用广泛的LNMP架构服务器的部署方式,并对PHP_FPM模块如何支持PHP语言进行讨论

一.Nginx服务基础

        Nginx(发音为[enginex])专为性能优化而开发,其最知名的优点是它的稳定性和低系统资源消耗,以及对HTTP并发连接的高处理能力(单台物理服务器可支持30000~50000个并发请求)。正因为如此,大量提供社交网络、新闻资讯、电子商务及虚拟主机等服务的企业纷纷选择Nginx来提供Web服务

        Nginx安装文件可以从官方网站http:/mwww.nginx.org/下载。下面以稳定版Nginx1.12.0为例,介绍Nginx的安装和运行控制

1.编译安装Nginx

(1)安装支持软件

        Nginx的配置及运行需要pcre、zlib等软件包的支持,因此应预先安装这些软件的开发包(devel),以便提供相应的库和头文件,确保Nginx的安装顺利完成。

yum -y install zlib-devel gcc* pcre-devel
(2)创建运行用户和组

        Nginx服务程序默认以nobody身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限,增加灵活性、降低安全风险。例如,创建一个名为nginx的用户,不建立宿主文件夹,也禁止登录到Shell环境

 [root@localhost~]# useradd -M -s /sbin/nologin nginx

备注:

  • useradd:这是用于添加新用户的命令。
  • -M:这个选项表示不为新用户创建主目录。
  • -s /sbin/nologin:这个选项指定了用户的 shell,这里是 /sbin/nologin,表示这个用户不能登录系统。
  • nginx:这是新用户的用户名。
(3)编译安装Nginx

        配置Nginx的编译选项时,将安装目录设为/usr/local/nginx,运行用户和组均设为nginx启用http_stub_status_module模块以支持状态统计,便于查看服务器的连接信息。具体选项根据实际需要来定,配置前可参考“./configure--help给出的说明。

[root@localhost~#tar zxf nginx-1.12.0.tar.gz              //解压nginx压缩文件
[root@localhost~]#cd nginx-1.12.0                         //进入解压后的目录下
[root@localhost  nginx-1.12.0]# ./configure --prefix=/usr/localnginx --user=nginx --group=nginx --with-http_stub_status_module                //
[root@localhost nginx-1.12.0]#make && make install        //编译与安装
[root@localhost nginx-1.12.0]# /usr/local/nginx/sbin/nginx -v  //检测是否安装成功
[root@localhost nginx-1.12.0]# /usr/local/nginx/sbin/nginx //启动nginx

        为了使Nginx服务器的运行更加方便,可以为主程序nginx创建链接文件,以便管理员直接执行“nginx命令就可以调用Nginx的主程序。

//将nginx命令软链接到系统管理员命令下
[root@localhost nginx-1.12.0# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin
//查看连接结果
[root@localhost nginx-1.12.0]#ls -l /usr/local/sbin/nginx
Irwxrwxrwx 1 root root 275 月 16 16:50 /usr/local/sbin/nginx ->/usr/localnginx/sbin/nginx

2.Nginx的运行控制

(1)检测配置文件

        与Apache的主程序httpd类似,Nginx的主程序也提供了“-t”选项用来对配置文件进行检查,以便找出不当或错误的配置。配置文件nginx.conf默认位于安装目录下的conf/子日录中。若要检查位于其他位置的配置文件,可使用“-c”选项来指定路径。

[root@localhost nginx-1.12.0]# 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
(2)启动、停止Nginx

        直接运行Nginx即可启动Nginx服务器,这种方式将使用默认的配置文件,若要改用其他配置文件,需添加“-c 配置文件路径”选项来指定路径。需要注意的是,若服务器中已装有httpd等其他Web服务软件,应采取措施(修改端口、停用或卸载)避免冲突

[root@localhost~]# nginx

通过检查Nginx程序的监听状态,或者在浏览器中访问此Web服务(默认页面将显示Welcometonginx!”),可以确认Nginx服务是否正常运行。

使用浏览器访问web服务器会显示以下内容

[root@localhost nginx-1.12.0]# yum -y install elinks
[root@localhost nginx-1.12.0]# elinks http://localhost

        主程序Nginx支持标准的进程信号,通过kil或killall命令发送HUP信号表示重载配置,QUIT信号表示退出进程,KILL信号表示杀死进程。例如,若使用killall命令,重载配置、停止服务的操作分别如下所示(通过“-s选项指定信号种类)

[root@localhost ~]# killall -s HUP nginx      //选项-s HUP等同于-1
[root@localhost ~]# killall -s QUIT nginx     //选项-s QUIT等同于-3

        当Nginx进程运行时,PID号默认存放在logs/目录下的nginx.pid文件中,因此若改用kill命令,也可以根据nginx.pid文件中的PID号来进行控制。

(3)添加Nginx系统服务

        为了使Nginx服务的启动、停止、重载等操作更加方便,可以编写Nginx服务脚本,并使用chkconfig和systemctl工具来进行管理,也更加符合CentOS7.3系统的管理习惯。

[root@localhost ~]# vim /etc/init.d/nginx
#!/bin/bash
//为后面脚本添加到系统启动服务列表“chkconfig --add nginx”
#chkconfig:- 99 20
#descriptiono:Nginx Service Control Script
//nginx命令存放位置
PROG="/usr/local/nginx/sbin/nginx"
//Nginx运行后pid存放的位置
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 "不是要输入的值"
        exit 1
esac
exit 0

        这样一来,就可以使用systemctl命令来启动,停止,重载Nginx服务器了,方法是在执行时添加相应的start,stop,restart,reload参数。

3.配置文件nginx.conf

        在Nginx服务器的主配置文件/usr/local/nginx/conf/nginx.conf中,包括全局配置、I/O事件配置和HTTP配置这三大块内容,配置语句的格式为“关键字     值;”(末尾以分号表示结束),以“#”开始的部分表示注释。

(1)全局配置

        由各种配置语句组成,不使用特定的界定标记。全局配置部分包括Nginx服务的运行用户、工作进程数、错误日志、PID存放位置等基本设置。

//运行用户
#user  nobody;
//工作进程数量
worker_processes  1;
//错误日志文件的位置
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
//PID文件的位置
#pid        logs/nginx.pid;

        上述配置中,worker_processes表示工作进程的数量。如果服务器有多块CPU或者使用多核处理器,可以参考CPU核心总数来指定工作进程数。如果网站访问量需求并不大,般设为1就够用了。其他三项配置均已有注释,表示采用默认设置,例如,Nginx的运行用户实际是编译时指定的nginx,若编译时未指定则默认为nobody                        

(2)I/O 事件配置

        使用“events{}”界定标记,用来指定Nginx进程的I/O响应模型、每个进程的连接数等设置。

events { 
use epoll; 		##使用 epoll 模型 
worker_connections 4096;      ##每进程处理 4096 个连接 
}

备注:epoll模式能够提高并发连接,并支持非活跃连接;总连接数由  进程x每个进程的连接数

(3)HTTP 配置

         使用“http{}”界定标记,包括访问日志、HTTP端口、网页目录、默认字符集、连接保持,以及后面要讲到的虚拟Web主机、PHP解析等一系列设置,其中大部分配置语句都包含在子界定标记“server{}”内

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"';
    //访问日志位置
    access_log  logs/access.log  main;    
    //支持文件发送(下载)
    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    
    //连接保持超时
    keepalive_timeout  65;

    #gzip  on;
    //Web服务器的监听配置
    server {
        //监听地址及端口
        listen       80;
        //网站名称(FQDN)
        server_name  www.benet.com;
        // 网页的默认字符集
        charset utf-8;
        
        #access_log  logs/host.access.log  main;
        //根目录配置
        location / {
            // 网站根目录的位置
            root   html;
            //默认首页(素引页)
            index  index.html index.htm;
        }
        //  内部错误的反馈页面
        error_page   500 502 503 504  /50x.html;
        //错误页面配置
        location = /50x.html {
            root   html;
        }
} 
} 

        上述配置中,listen语句允许同时限定IP地址,采用“IP地址:端口”形式。root语句用来设置特定访问位置(如“location/表示根目录)的网页文档路径,默认为Nginx安装目录下的htm子目录,根据需要可改为/var/www/html等其他路径。

4.访问状态统计

        Nginx内置了HTTP_STUB_STATUS状态统计模块,用来反馈当前的Web访问情况。配置编译参数时可添加--with-http_stub_status_module来启用此模块支持,可以使用命令/usr/loca/nginx/sbin/nginx-V查看已安装的Nginx是否包含HTTP_STUB_STATUS模块。

        要使用Nginx的状态统计功能,除了启用内建模块以外,还需要修改nginx.conf配置文件,指定访问位置并添加stub_status配置代码。

http {
    server {
        listen       80;
        server_name  localhost;
        charset utf-8;
        location / {
            root   html;
            index  index.html index.htm;
        }
        //访问位置为/status
        location /status {
                //打开状态统计功能
                stub_status on;
                //关闭此位置的日志记录
                access_log off;
        }
    } 
}

配置文件修改并重启后,使用地址: 192.168.10.101/status 访问

备注:Active connections表示当前的活动连接数(2);而“senver accepts handled requests表示已经处理的连接信息,三个数字依次表示已处理的连接数(2)、成功的TCP握手次数(2)、已处理的请求数(1)

二.Nginx访问控制

1.基于授权的访问控制

(1)基于授权的访问控制介绍

         Nginx与Apahce一样,可以实现基于用户授权的访问控制,当客户端想要访问相应网站或者目录时,要求用户输入用户名和密码才能正常访问,配置步骤与Apache基本一致。既括为以下几个步骤。

  • 生成用户密码认证文件
  • 修改主配置文件相对应目录,添加认证配置项
  • 重启服务,访问测试。
(2)基于授权的访问控制步骤

(a)使用htpasswd生成用户认证文件,如果没有该命令,可使用yum安装httpd-tools件包,用法与Apache认证时方式相同,如:htpasswd -c /usr/local/nginx/passwd.db henanxiaoman。在/usr/local/nginx/目录下生成了passwd.db文件,用户名是henanxiaoman,密码输入两次。在passwd.db中生成用户和密码的密文。

[root@localhost ~]# yum -y install httpd-tools
[root@localhost ~]# htpasswd -c /usr/local/nginx/passwd.db 
New password: 
Re-type new password: 
Adding password for user henanxiaoman

(b)修改密码文件权限为400,将所有者改为nginx,设置Nginx的运行用户能够读取。

[root@localhost~]# chmod 400 /usr/local/nginx/passwd.db
[root@localhost~]# chown nginx /usr/local/nginx/passwd.db
[root@localhost~]# ll -d /usr/local/nginx/passwd.db

(c)修改主配置文件nginx.conf,添加相应认证配置项。

        location / {
            root   html;
            index  index.html index.htm;
            auth_basic "secret";
            auth_basic_user_file /usr/local/nginx/passwd.db;
        }

(d)检测语法,重启服务

[root@localhost 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
[root@localhost nginx]# systemctl restart nginx

(e)用浏览器访问网址,检测控制效果

2.基于用户端的访问控制

(1)介绍

        基于客户端的访问控制是通过客户端IP地址,决定是否允许对页面访问。Nginx基于客户端的访问控制要比Apache简单,规则如下:

  • deny IP/IP段:拒绝某个IP或IP段的客户端访问
  • allow IP/IP段:允许某个IP或IP段的客户端访问
  • 规则从上往下执行,如匹配则停止,不再往下匹配
 (2)基于客户端的访问控制步骤

(a)修改主配置文件nginx.conf,添加相应配置项。 

[root@localhost ~]# vim lusrllocal/nginxlconflnginx.conf
  server {
           location /{
               deny 192.168.10.102             //客户端IP
               allow all;
                      }
         }
(3)重启服务器访问网址,在102主机上访问页面已经访问不到 

三.Nginx虚拟主机

        用虚拟主机,不用为每个要运行的网站提供一台单独的Nginx服务器或单独运行-组Nginx进程,虚拟主机提供了在同一台服务器,同一组Nginx进程上运行多个网站的功能。跟Apache一样,Nginx也可以配置多种类型的虚拟主机,分别是基于IP的虚拟主机、基于域名的虚拟主机、基于端口的虚拟主机。
    使用Nginx搭建虚拟主机服务器时,每个虚拟Web站点拥有独立的“server{}”配置段,各自监听的IP地址、端口号可以单独指定,当然网站名称也是不同的。

1.基于域名的虚拟主机

(1)修改Windows客户机的C:Windows\System32\drivers\etc\hosts文件,加入www.henan.com和www.xiaoman.com这两个域名,它们都指向同一个服务器IP地址, 用于实现不同的域名访问不同的虚拟主机

修改hosts 文件,加入www.henan.com 和 www.xiaoman.com 这两个域名
192.168.10.101 www.henan.com
192.168.10.101 www.xiaoman.com

 (2)准备各个网站的目录和测试首页

[root@localhost ~]# mkdir -p /var/www/html/hecom/ 
[root@localhost ~]# mkdir -p /var/www/html/xiaocom/ 
[root@localhost ~]# echo "www.henan.com">> /var/www/html/hecom/index.html 
[root@localhost ~]# echo "www.xiao.com">>/var/www/html/xiaocom/index.html

(3)修改配置文件,把配置文件中的server代码段全部去掉,加入2个新的senver段,对应2个域名。

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf

    server {
        listen       80;
        server_name www.henan.com;
        access_log logs/www.henan.com.access.log;
        charset utf-8;
        location / {
            root   /var/www/html/hecom;
            index  index.html index.htm;
        }

        error_page 500 502 503 504 /50x.html;
        location = 50x.html {
                root html;
        }
    }



    server {
        listen       80;
        server_name www.xiaoman.com;
        access_log logs/www.xiaoman.com.access.log;
        charset utf-8;
        location / {
            root   /var/www/html/xiaocom;
            index  index.html index.htm;
        }

    }

(4)测试

2.基于IP的虚拟主机 

(1)为服务器设置多个IP地址

[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens33:0
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens33:1

[root@localhost network-scripts]# vim ifcfg-ens33:0
IPADDR=192.168.10.150
NETMASK=255.255.255.0
GATEWAY=192.168.10.254
DNS1=223.6.6.6
NAME=ens33:0
DEVICE=ens33:0

[root@localhost network-scripts]# vim ifcfg-ens33:1
IPADDR=192.168.10.160
NETMASK=255.255.255.0
GATEWAY=192.168.10.254
DNS1=223.6.6.6
NAME=ens33:1
DEVICE=ens33:1

[root@localhost network-scripts]# systemctl restart network

(2)修改 Nginx的配置文件,使基于 IP 的虚拟主机生效

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf 
   
   server {
        listen       192.168.10.150:80;
        server_name  www.henan.com;
.....
   }

    server {
        listen       192.168.10.160:80;
        server_name www.xiaoman.com;
.....
   }

(3)访问两个IP网站,测试页面是否生效 

 3:基于端口的虚拟主机

1)选择系统中不使用的端口,多个端口映射到同一 IP 地址

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf 
    server {
        listen       192.168.10.101:8080;
        server_name  www.henan.com;
.....
   }

    server {
        listen       192.168.10.101:8888;
        server_name www.xiaoman.com;
.....
    }

[root@localhost ~]# systemctl restart nginx

2)检测端口是否运行正常

[root@localhost ~]# netstat -anpt | grep nginx

3)分别访问 2 个端口地址

  • 18
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值