Nginx网站服务(基础理论、运行、访问控制、Nginx虚拟主机)

前言:

  • 在各种网站服务器软件中,除了Apache HTTP Server外,还有一款轻量级的HTTP服务器软件–Nginx,其稳定,高效的特性逐渐被越来越多的用户认可
  • 其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名
    其特点是:占有内存少,并发能力强
  • 中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

一、Nginx服务基础

1.1 Nginx概述
  • 一款高性能、轻量级Web服务软件

    稳定性高

    系统资源消耗低

    对HTTP并发连接的处理能力高

    单台物理服务器可支持30000 ~ 50000个并发请求

    占用内存少,并发能力强

1.2 手工编译安装Nginx
  • 安装环境依赖包
[root@localhost ~]# yum -y install gcc gcc-c++ pcre-devel zlib-devel
.......省略部分内容
  • 创建程序性用户管理nginx
[root@localhost ~]# useradd -M -s /sbin/nologin/ nginx	#-M 代表不创建家目录
  • 挂载共享文件、编译安装Nginx
[root@localhost ~]# mount.cifs //192.168.181.1/LAMP-C7 /mnt
Password for root@//192.168.181.1/LAMP-C7:  
[root@localhost ~]# cd /mnt/LNMP-C7/
[root@localhost LNMP-C7]# ls
Discuz_X3.4_SC_UTF8.zip  mysql-boost-5.7.20.tar.gz  nginx-1.12.2.tar.gz  php-7.1.10.tar.bz2  php-7.1.20.tar.gz
jdk-6u14-linux-x64.bin   ncurses-5.6.tar.gz         php-5.6.11.tar.bz2   php-7.1.20.tar.bz2  zend-loader-php5.6-linux-x86_64_update1.tar.gz
[root@localhost LNMP-C7]# tar zxvf nginx-1.12.2.tar.gz -C /opt/
...........省略部分内容
[root@localhost LNMP-C7]# cd /opt/nginx-1.12.2/
[root@localhost nginx-1.12.2]# ./configure \
> --prefix=/usr/local/nginx \		#指定nginx工作目录
> --user=nginx \					#指定nginx的用户
> --group=nginx \					#指定nginx的基本组
> --with-http_stub_status_module	#开启stub_status状态统计模块
......省略部分内容
[root@localhost nginx-1.12.2]# make && make install
  • 创建软链接便于系统管理
[root@localhost nginx-1.12.2]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
1.3 运行控制
  • 检查语法
[root@localhost nginx-1.12.2]# 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
#目录文件语法正确
#目录文件配置成功

Ps:nginx的常用操作有

nginx -t 检查

nginx 启动

killall -1 nginx 重启

killall -3 nginx 停止

  • 将Nginx添加为系统服务

方式一:使用systemctl 工具进行管理

[root@localhost nginx-1.12.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		#启动服务
ExecReload=/usr/bin/kill -S HUP $MAINPID	#根据PID重载配置
ExecStop=/usr/bin/kill -S QUIT $MAINPID		#根据PID终止进程
PrivateTmp=true

[Install]
WantedBy=multi-user.target
[root@localhost nginx-1.12.2]# chmod 754 /lib/systemd/system/nginx.service		#设置754权限是一种安全优化

方式二:添加service工具进行管理

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
exit 0

添加执行权限、将脚本文件添加到服务列表中

[root@localhost nginx-1.12.2]# cd /etc/init.d
[root@localhost init.d]# chmod +x nginx
[root@localhost init.d]# chkconfig --add nginx
[root@localhost init.d]# chkconfig --level 35 nginx on #开机自启
[root@localhost init.d]# service nginx start

二、Nginx访问控制

2.1 配置文件简介
  • 全局配置
[root@localhost init.d]# vim /usr/local/nginx/conf/nginx.conf
#user nobody;					#运行用户
worker_ processes 1;			#工作运行数量
#error_ log logs/error.log;		#错误日志文件的位置
#pid logs/nginx.pid;			#PID文件的位置
  • I/O 事件配置
events {
       worker_connections  1024;      #每进程处理1024个连接
}
  • HTTP 配置
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;

    server {   //web服务器的监听配置
        listen       80;               #监听端口
        server_name  localhost;        #域名

        #charset koi8-r;         #网页的默认字符集  

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
        root   html;
        }
2.2 访问状态统计
  • 状态统计模块

    ① 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 配置代码。

  • 修改nginx主配置文件


#搜索/server 修改其中三个模块即可
server {
        listen       80;                #监听端口
        server_name  www.test.com;      #1、修改监听域名

        charset utf-8;   				#2、修改字符集

        #access_log  logs/host.access.log;

        location / {
            root   html;
            index  index.html index.htm;
        }
        #3、增添一段location /status 状态统计功能
        location /status {
            stub_status on;
            access_log off;
        }  
}
#添加配置信息时要注意大括号概况的范围
  • 重启服务
[root@localhost init.d]# service nginx stop 
[root@localhost init.d]# service nginx start

三、访问控制

3.1 安装、配置DNS服务
  • 安装bind软件包
yum -y install bind
  • 修改全局配置文件
vim /etc/named.conf 

在这里插入图片描述

  • 修改区域配置文件
vim /etc/named.rfc1912.zones 
#添加以下内容
zone "demo.com" IN {
        type master;
        file "demo.com.zone";
        allow-update { none; };
};
  • 修改区域数据配置文件
[root@localhost named]# cp -p named.localhost demo.com.zone
[root@localhost named]# vim demo.com.zone 

在这里插入图片描述

  • 启动服务
[root@localhost named]# systemctl start named
3.2 测试DNS解析服务
  • 修改win10虚拟机网络配置
    在这里插入图片描述

  • 尝试地址解析
    在这里插入图片描述

  • 使用浏览器测试
    在这里插入图片描述

3.3 设置访问控制
  • 基于授权的访问控制

    Nginx 和Apache 一样,可以实现基于用于授权的访问控制,当客户端想访问网站时,会要求输入用户名和密码才可以正常访问,配置步骤和 Apache 基本一致。

基于授权的访问控制配置思路

  • 生成用户密码认证文件
  • 修改主配置文件对相应目录,添加认证配置项
  • 重启服务,访问测试
3.3.1 修改主配置文件
  • 修改主配置文件nginx.conf,添加认证配置项
        location / {
            auth_basic "secret";		#在主页配置项中添加认证
            auth_basic_user_file /usr/local/nginx/passwd.db;			 #在主页配置项中添加认证
            root   html;
            index  index.html index.htm;
        }
c
  • 安装tools软件包
yum install httpd-tools -y 
  • 使用htpasswd命令生成用户认证文件
[root@localhost conf]# htpasswd -c /usr/local/nginx/passwd.db test01
New password:
Re-type new password:
Adding password for user test01

以上指定认证的用户名及密码创建完成

  • 重启服务
[root@localhost conf]# service nginx restart
3.3.2 测试访问控制

在这里插入图片描述

3.4 基于客户端的访问控制
  • 通过客户端IP地址,决定是否允许对页面进行访问

  • 配置规则

    deny IP/IP段:拒绝某个IP或IP网段的客户端进行访问

    allow IP/IP段:允许某个IP或IP段的客户端访问

    规则从上往下执行,如匹配符合则停止,不会继续向下匹配

  • 配置规则

    修改主配置文件,添加相应配置项

        location / {
            deny 192.168.181.128;	#拒绝181.128主机进行访问(此为win10虚拟机的IP)
            allow all;				#允许所有客户机进行访问
            auth_basic "secret";
            auth_basic_user_file /usr/local/nginx/passwd.db;
            root   html;
            index  index.html index.htm;
        }
  • 重启Nginx
[root@localhost conf]# service nginx stop
[root@localhost conf]# service nginx start
  • 使用win10虚拟机验证

在这里插入图片描述

小结:基于客户端的访问控制中,虽然在根配置项中配置了拒绝win10访问及允许所有主机访问,但是系统检测时,自上而下,匹配到后就不会再往下匹配。

四、Nginx虚拟主机(三种方式)

4.1 Nginx虚拟主机应用
  • 基于域名的虚拟主机

  • 基于IP的虚拟主机

  • 基于端口的虚拟主机

    通过在主配置文件 “server{}” 配置段中实现

4.2 基于域名的虚拟主机

环境:手工编译安装Nginx,安装、配置DNS服务

4.2.1 配置DNS
[root@localhost conf]# vim /etc/named.conf
options {
        listen-on port 53 { any; };		#修改为any
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        allow-query     { any; };		#修改为any

[root@localhost conf]# vim /etc/named.rfc1912.zones 
zone "dog.com" IN {
        type master;
        file "dog.com.zone";
        allow-update { none; };
};

zone "cat.com" IN {
        type master;
        file "cat.com.zone";
        allow-update { none; };
};
#添加以上两段信息,因为基于域名配置虚拟主机,所以需要有两个域名。
[root@localhost named]# mv named.localhost dog.com.zone
[root@localhost named]# cat dog.com.zone 
$TTL 1D
@	IN SOA	@ rname.invalid. (
					0	; serial
					1D	; refresh
					1H	; retry
					1W	; expire
					3H )	; minimum
	NS	@
	A	127.0.0.1
www IN	A	192.168.181.129		#删除ipv6地址、添加本机地址
[root@localhost named]# cp -p dog.com.zone cat.com.zone
[root@localhost named]# ls
cat.com.zone  dog.com.zone  named.ca     named.localhost  slaves
data          dynamic       named.empty  named.loopback
[root@localhost named]# systemctl stop firewalld.service
[root@localhost named]# setenforce 0
[root@localhost named]# systemctl restart named
#关闭防火墙、增强性安全功能、开启服务
  • 使用win10解析DNS域名
    在这里插入图片描述
4.2.2 基于域名虚拟主机配置步骤
  • ① 准备网站目录及测试文件
[root@localhost ~]# mkdir -p /var/www/html/dog
[root@localhost ~]# mkdir -p /var/www/html/cat
[root@localhost ~]# cd /var/www/html
[root@localhost html]# ls
cat  dog
[root@localhost html]# echo "this is dogs web" > dog/index.html
[root@localhost html]# echo "this is cats web" > cat/index.html
  • ② 编辑nginx主配置文件

server {
        listen       80;
        server_name  www.dog.com;	#将localhost改为www.dog.com
        charset utf-8;				#开启字符集,修改为utf-8
        access_log  logs/www.dog.com.access.log;	#开启访问日志,添加www.dog.com,删除 ‘main’
        location / {
            root   /var/www/html/dog;	#站点首页文件指向刚刚创建的文件目录
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {			#错误提示50X
            root   html;				#错误提示来自站点html(nginx工作目录的相对路径)
        }
    }

#复制以上信息,粘贴并进行简单修改
server {
        listen       80;
        server_name  www.cat.com;		#修改域名
        charset utf-8;					#字符集
        access_log  logs/www.cat.com.access.log;	#访问日志名改为www.cat.com
        location / {
            root   /var/www/html/cat;	#站点首页指向cat文件目录
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
[root@localhost conf]# 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 conf]# service nginx restart	#重启服务
  • ③ 验证是否可以使用不同域名进行访问

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

4.3 基于端口的虚拟主机
  • ①创建8080端口的测试网页
[root@localhost conf]# mkdir -p /var/www/html/cat8080
[root@localhost conf]# echo "this is cats 8080 web" > /var/www/html/cat8080/index.html
[root@localhost conf]# cat /var/www/html/cat8080/index.html
this is cats 8080 web
  • ② 修改nginx主配置文件,仅修改监听端口
    server {
        listen       192.168.181.129:80;	#修改监听地址
        server_name  www.cat.com;
        charset utf-8;
        access_log  logs/www.cat.com.access.log;
        location / { 
            root   /var/www/html/cat;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
}
#复制以上信息,修改部分内容
    server {
        listen       192.168.181.129:8080;	#修改监听端口
        server_name  www.cat.com;
        charset utf-8;
        access_log  logs/www.cat8080.com.access.log;	#修改访问日志文件名
        location / {
            root   /var/www/html/cat8080;	#修改站点首页文件目录名
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
}
-------->wq
[root@localhost conf]# 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 conf]# service nginx stop
[root@localhost conf]# service nginx start		
#重启服务
[root@localhost conf]# netstat -natp | grep nginx
tcp        0      0 192.168.181.129:8080    0.0.0.0:*               LISTEN      6017/nginx: master  
tcp        0      0 192.168.181.129:80      0.0.0.0:*               LISTEN      6017/nginx: master 
  • 访问两个不同端口进行验证
    在这里插入图片描述

在这里插入图片描述

4.4 基于不同IP的虚拟主机
  • ① 添加网卡,修改域名、IP

环境

www.dog.com 192.168.181.129

www.cat.com 192.168.181.134

  • 修改DNS区域数据配置文件
[root@localhost conf]# cd /var/named
[root@localhost named]# vim cat.com.zone 
www IN  A       192.168.181.134		#将IP修改为192.168.181.134
  • 重启DNS服务
[root@localhost named]# systemctl restart named
  • ② 修改nginx主配置文件
·   server {
        listen       192.168.181.134:80; #只要修改监听的地址即可(ens36)
        server_name  www.cat.com;
        charset utf-8;
        access_log  logs/www.cat.com.access.log;
        location / {
            root   /var/www/html/cat;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
}

    server {
        listen       192.168.181.129:80;	#地址指向ens33
        server_name  www.dog.com;
        charset utf-8;
        access_log  logs/www.dog.com.access.log;
        location / {
            root   /var/www/html/dog;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
------->wq
[root@localhost conf]# 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 conf]# service nginx stop
[root@localhost conf]# service nginx start
  • 验证DNS解析与网页
    在这里插入图片描述
    使用浏览器访问192.168.181.129与192.168.181.134地址
    在这里插入图片描述
    在这里插入图片描述

总结

需注意:现网环境下修改配置文件前,最好将配置文件进行备份,如果修改有误,恢复相当麻烦,在配置文件中修改、添加内容时,一定要注意 “}” 的位置范围,配置完之后检查语法问题,无误后启动服务。

发布了55 篇原创文章 · 获赞 47 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_45726050/article/details/104123182