文章目录
前言:
- 在各种网站服务器软件中,除了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地址
总结
需注意:现网环境下修改配置文件前,最好将配置文件进行备份,如果修改有误,恢复相当麻烦,在配置文件中修改、添加内容时,一定要注意 “}” 的位置范围,配置完之后检查语法问题,无误后启动服务。