Nginx网站服务配置(Nginx服务基础,访问状态统计,访问控制,虚拟主机)

编译安装Nginx服务

关闭防火墙,将安装 ngnix 所需的软件包上传到 /opt 目录下

[root@localhost ~]# systemctl stop firewalld.service        //关闭系统防火墙
[root@localhost ~]# systemctl disable firewalld.service     //关闭防火墙开机自启
[root@localhost ~]# setenforce 0                            //关闭系统安全机制

[root@localhost ~]# cd /opt
[root@localhost opt]# ls
rh
[root@localhost opt]# rz -E
rz waiting to receive.
[root@localhost opt]# ls
nginx-1.12.2.tar.gz    rh

在这里插入图片描述

安装依赖包

yum -y install pcre-devel zlib-devel gcc gcc-c++ make

编译安装Nginx

cd /opt
tar zxvf nginx-1.12.2.tar.gz -C /opt/

cd /opt/nginx-1.12.2/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module

//每行代表的意思
./configure \
--prefix=/usr/local/nginx \	 		            //指定nginx的安装路径
--user=nginx \				    		   		//指定用户名
--group=nginx \									//指定组名
--with-http_stub_status_module			 		//启用 http_stub_status_module 模块以支持状态统计 

make && make install                    //编译并安装

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/		//创建软链接、方便系统识别nginx的命令

创建运行用户、组

(Nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限)

useradd -M -s /sbin/nologin nginx   //创建程序用户,以便准确的控制访问
//Nginx服务程序默认以匿名用户运行

检查、启动、重载配、停止Nginx

nginx -t      //检查配置文件是否配置正确
nginx         //启动服务
netstat -anpt | grep 80   //检查一下端口

停止nginx 服务

cat /usr/local/nginx/logs/nginx.pid    //首先查看nginx的PID号
kill -3  <PID号>         //杀死
kill -s QUIT <PID号>     //退出
killall -3 nginx    
killall -s QUIT nginx

重载

kill -1 <PID号> 
kill -s HUP <PID号>         //-s选项指定信号种类  HUP表示重载配置
killall -1 nginx
killall -s HUP <PID号>      //QUIT信号表示退出进程
Kill -USR1 <PID号>        //日志分隔,重新打开日志文件
kill -USR2 <PID号>        //平滑升级

在这里插入图片描述

增加Nginx系统服务

方式一:

vim /etc/init.d/nginx
以下内容:
#!/bin/bash
# chkconfig: - 99 20							// chkcofig - “-” 表示不启用开机启动管理 (同时 若不加“#”, chkconfig add nginx 会加载不到配置)
# description: Nginx Service Control Script
COM="/usr/local/nginx/sbin/nginx"				//命令程序文件位置(nginx)
PID="/usr/local/nginx/logs/nginx.pid"			//pid文件
case "$1" in
start)
   $COM
   ;;
stop)
   kill -s QUIT $(cat $PID)
   ;;
restart)
   $0 stop
   $0 start
   ;;
reload)
   kill -s HUP $(cat $PID)
   ;;
*)
       echo "Usage: $0 {start|stop|restart|reload}"
       exit 1
esac
exit 0
chmod +x /etc/init.d/nginx
chkconfig --add nginx							#添加为系统服务
systemctl stop nginx
systemctl start nginx

方法2:

vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx		//描述
After=network.target	//描述服务类别
[Service]
Type=forking			//后台运行形势
PIDFile =/usr/local/nginx/logs/nginx.pid	//PID文件位置
ExecStart=/usr/local/nginx/sbin/nginx		//启动服务
ExecrReload=/bin/kill -s HUP $MAINPID	    //根据PID重载配置
ExecrStop=/bin/kill -s QUIT $MAINPID		//根据PID终止进程
PrivateTmp=true
[Install]
WantedBy=multi-user.target
chmod 754 /lib/systemd/system/nginx.service		//设置754权限是一种安全优化
systemctl start nginx.service                   //开启服务
systemctl enable nginx.service                  //开启开机自启
  • 宿主机访问

在这里插入图片描述

配置文件nginx.conf

vim /usr/local/nginx/conf/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;       //错误日志文件的位置
#pid logs/nginx.pid;              //PID文件的位置

2.I/O事件配置
使用“events{ }”界定标记,用来指定Nginx进程的I/O响应模型、每个进程的连接数等设置。对于2.6及以上版本的内核,建议使用epoll模型以提高性能;每个进程的连接数应根据实际需要来定,一般在10000以下(默认为1024)。

events {
  use epoll;              //使用 epoll 模型,2.6及以上版本的系统内核,建议使用 epoll 模型以提高性能
  worker_connections 4096;    //每个进程处理 4096 个连接
}

#如提高每个进程的连接数还需执行“ulimit -n 65535”命令临时修改本地每个进程可以同时打开的最大文件数。
#在Linux 平台上,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。
#可使用ulimit -a 命令查看系统允许当前用户进程打开的文件数限制。

3.HTTP 配置

使用“htp{}”界定标记,包括访问日志、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;
    ##此项允许或禁止使用socket的TCP_CORK的选项(发送数据包前先缓存数据),此选项仅在使用sendfile的时候使用
    #tcp_nopush     on;
    ##连接保持超时时间,单位是秒
    #keepalive_timeout  0;
    keepalive_timeout  65;              #连接保持超时
    ##gzip模块设置,设置是否开启gzip压缩输出
    #gzip  on;
##web 服务的监听配置
    server { 
        listen       80;               #监听地址及端口
        server_name  www.gcc.com;      #站点域名,可以有多个,用空格隔开
        #charset koi8-r;        #网页的默认字符集  
        location / {           #根目录配置
            root   html;       #网站根目录的位置/usr/local/nginx/html
            index  index.html index.htm;   #设置首页文件名
        }
        ##内部错误的反馈页面
        error_page  500 502 503 504 /50x.html;
        ##错误页面配置
        location = /50x.html {
             root   html;
        }
      }
  }
  • 步骤
cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak    //备份
vim /usr/local/nginx/conf/nginx.conf 

----------在37行修改域名
    server {
        listen       80;               //监听端口,主机IP不加则默认监听全部要
        server_name  www.520.com;      //域名
        

在这里插入图片描述

配置本地映射

echo "192.168.41.140 www.520.com" >> /etc/hosts

在这里插入图片描述

  • 宿主机访问

在这里插入图片描述

访问状态统计

  • Nginx 内置了HTTP_STUB_STATUS状态统计模块,用来反馈当前的Web访问情况,配置编译参数时可添加--with-http_stub_status_module来启用此模块支持
  • 可使用命令/usr/local/nginx/sbin/nginx-V来查看已安装的Nginx是否包含HTTP_STUB_STATUS模块。
  • 要使用Nginx的状态统计功能,除了启用内建模块以外,还需要修改nginx.conf配置文件,指定访问位置并添加stub_status 配置代码。
vim /usr/local/nginx/conf/nginx.conf

//增加 stub_status 配置
location /status {         //访问位置为/status
     stub_status on;       //打开状态统计功能
     access_log off;       //关闭此位置的日志记录
}

在这里插入图片描述

重启服务,访问测试

nginx -t
systemctl restart nginx.service
netstat -natp | grep 80

在这里插入图片描述

  • 测试

在这里插入图片描述

访问控制

基于授权的访问控制

1.生成用户密码认证文件

yum install -y httpd-tools     //因为htpasswd是apche的工具,所以要先安装工具

htpasswd -c /usr/local/nginx/passwd.db zhangsan
//创建一个用户,并且-c创建一个/uer/local/nginx/passwd.db用于储存用户信息
 
chown nginx /usr/local/nginx/passwd.db     //增加nginx 管理
chmod 400 /usr/local/nginx/passwd.db       //给与400权限(安全权限)
将属主和权限进行修改、这样除了root和nginx用户可以读,其他用户和组都不能读nginx用户之后不能登录

在这里插入图片描述

2.修改主配置文件相对应目录,增加认证配置项

vim /usr/local/nginx/conf/nginx.conf
......          //省略部分内容
 43         location / {
 44                 auth_basic "secret";        //在主页配置项目中增加认证
 45                 auth_basic_user_file /usr/local/nginx/passwd.db;        //在主页配置项中增加认证
 46             root   html; 
 47             index  index.html index.htm;
 48         }
 49         location /status {
 50             stub_status on;
 51             access_log off;
 52         }
 ......          //省略部分内容

在这里插入图片描述

重启服务,访问测试

nginx -t
systemctl restart nginx

在这里插入图片描述

  • 测试

在这里插入图片描述

基于客户端的访问控制

基于客户端的访问控制简介

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

  1. deny IP/IP段:拒绝某个IP或IP段的客户端访问。
  2. allow IP/IP段:允许某个IP或IP段的客户端访问。
  3. 规则从上往下执行,如匹配则停止,不再往下匹配。

基于客户端的访问控制步骤

Nginx 实现客户端访问控制的步骤如下:
①修改主配置文件nginx.conf,添加相应配置项。

vim /usr/local/nginx/conf/nginx.conf

 43         location / {
 44                 auth_basic "secret";        //44,45行删除掉
 45                 auth_basic_user_file /usr/local/nginx/passwd.db;
 46             root   html;
 47             index  index.html index.htm;
 48                 deny 192.168.41.160;         //增加拒绝访问的客户端的IP
 49                 allow all;                  //增加允许其他IP客户端访问
 50         }

在这里插入图片描述

重启服务,访问测试

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

Nginx虚拟主机

基于域名的Nginx虚拟主机

  • 添加两个域名,它们都指向同一个服务器IP地址,用于实现不同的域名访问不同的虚拟主机
vim /etc/hosts
192.168.41.140 www.520.com www.accp.com www.benet.com       //在后面增加两个域名

在这里插入图片描述

为虚拟主机准备网页文档

mkdir -p /var/www/html/accp         //创建www.accp.com的根目录
mkdir -p /var/www/html/benet        //创建www.benet.com的根目录
echo "<h1> www.accp.com<h1>" >/var/www/html/accp/index.html
echo "<h1> www.benet.com<h1>" >/var/www/html/benet/index.html

在这里插入图片描述

修改Nginx的配置文件

 35     server {
 36         listen       80;
 37         server_name  www.accp.com;            //设置域名www.acc0.com
 38         charset utf-8;
 39         access_log  logs/accp.access.log;     //设置日志名
 40         location / {
 41             root   /var/www/html/accp/;       //设置www.accp.com的工作目录
 42             index  index.html index.htm;
 43         }
 44         error_page   500 502 503 504  /50x.html;
 45         location = /50x.html {
 46             root   html;
 47         }
 48     }
 49 
 50     server {
 51         listen       80;
 52         server_name  www.benet.com;
 53         charset utf-8;
 54         access_log  logs/benet.access.log;
 55         location / {
 56             root   /var/www/html/benet/;
 57             index  index.html index.htm;
 58         }
 59         error_page   500 502 503 504  /50x.html;
 60         location = /50x.html {
 61             root   html;
 62         }
 63     }

重启服务,访问测试

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

基于端口的虚拟机

创建8080端口的网页文件

mkdir -p /var/www/html/ll8080
echo "<h1> www.ll8080.com </h1>" > /var/www/html/ll8080/index.html

在这里插入图片描述

修改nginx主配置文件,仅修改监听端口

 35     server {                                 //原accp配置
 36         listen       192.168.41.140:80;      //指向监听端口
 37         server_name  www.accp.com;
 38         charset utf-8;
 39         access_log  logs/accp.access.log;
 40         location / {
 41             root   /var/www/html/accp/;
 42             index  index.html index.htm;
 43         }
 44         error_page   500 502 503 504  /50x.html;
 45         location = /50x.html {
 46             root   html;
 47         }
 48     }
 49 
 50     server {                                    //新accp配置
 51         listen      192.168.41.140:8080;        //指向8080端口
 52         server_name  www.accp.com;
 53         charset utf-8;
 54         access_log  logs/accp8080.access.log;   //便于区分,指定生成不同日志
 55         location / {
 56             root   /var/www/html/accp8080;      //指向8080端口的站点首页
 57             index  index.html index.htm;
 58         }
 59         error_page   500 502 503 504  /50x.html;
 60         location = /50x.html {
 61             root   html;
 62         }
 63     }

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

基于不同IP访问

临时创建虚拟网卡

ifconfig ens33:0 192.168.41.100 netmask 255.255.255.255

在这里插入图片描述

增加192.168.41.100的映射

  • 同时删除之前的www.benet.cim映射
vim /etc/hosts
192.168.41.100 www.benet.com

在这里插入图片描述

创建网站根目录、创建192.168.41.100的网站首页文件(index.html)

mkdir /var/www/html/benet100
echo "<h1> www.benet100.com </h1>" >>/var/www/html/benet100/index.html

在这里插入图片描述

修改配置文件

 35     server {
 36         listen       192.168.41.140:80;
 37         server_name  www.accp.com;
 38         charset utf-8;
 39         access_log  logs/accp.access.log;
 40         location / {
 41             root   /var/www/html/accp/;
 42             index  index.html index.htm;
 43         }
 44         error_page   500 502 503 504  /50x.html;
 45         location = /50x.html {
 46             root   html;
 47         }
 48     }
 49 
 50     server {
 51         listen      192.168.41.100:80;           //benet监听的IP修改为100
 52         server_name  www.accp.com;
 53         charset utf-8;
 54         access_log  logs/benet100.access.log;
 55         location / {
 56             root   /var/www/html/benet100;
 57             index  index.html index.htm;
 58         }
 59         error_page   500 502 503 504  /50x.html;
 60         location = /50x.html {
 61             root   html;
 62         }
 63     }

重启服务,访问测试

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

总结

  • Nginx 内建的访问统计功能由stub_status模块提供,需要在编译时启用“--with-http_stub_status_module”选项。
  • Nginx 页面访问安全有基于授权和基于客户端两种方式。
  • Nginx 虚拟主机搭建可基于IP、域名和端口。

版权声明:本文为niu0426原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。