文章目录
一、Nginx概述
1.什么是Lginx
Lginx一款高性能、轻量级Web服务软件
优点:
- 稳定性高
- 系统资源消耗低
- 对HTTP并发(同时访问我)连接的处理能力高
- 单台物理服务器可支持30 000——50 000个并发请求
2.Nginx工作原理
- Nginx由内核和模块组成
- Nginx本身做的工作实际很少,当它接到HTTP请求时,它仅仅是通过查找配置文件将此次请求映射到一个location block,而此location中所配置的各个指令则会启动不同的模块去完成工作,因此模块可以看做Nginx真正的劳动工作者
3.Nginx 的模块从功能上分为如下三类
- handler(处理器)模块:负责处理请求,完成响应内容的生成
- filter(过滤器)模块:filter模块是对响应内容进行处理
- proxies(代理类)模块:此类模块是Nginx的HTTP Upstream之类的模块
这些模块主要与后端一些服务比如FastCGI(动态网页请求)等进行交互,实现服务代理和负载均衡等功能
4.Nginx的模块从结构上分为核心模块、基础模块和第三方模块
- 核心模块:HTTP(网页)模块、EVENT(事件)模块和MAIL(邮件)模块;
- 基础模块:HTTP Access(访问)模块、HTTP FastCGI(动态网页请求)模块、HTTP Proxy(代理)模块和HTTP Rewrite(重写)模块
- 第三方模块:HTTP Upstream Request Hash (动态池)模块、Notice(注意)模块和HTTP Access Key模块;
二、搭建Nginx虚拟Web主机
1.搭建Nginx服务
1.1 准备安装包,用XShell文件传输到根目录
1.2 关闭防火墙,防止开启自启动
systemctl stop firewalld
setenforce 0
systemctl disable firewalld
[root@server1 ~]# sed -i '/SELINUX/s/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
[root@server1 ~]# grep -v "#" /etc/selinux/config
1.3 安装依赖包
[root@server1 ~]# yum -y install \
gcc \
gcc-c++ \
make \
pcre-devel \ #是perl语言的正则表达式
zlib-devel \ #软件包的开发包,一个函数库,库里面包括头文件、静态库甚至源码等资源
1.4 创建一个不可登陆用户
[root@server1 ~]# useradd -M -s /sbin/nologin nginx
1.5 解压nginx软件包
[root@server1 ~]# tar zxvf nginx-1.12.2.tar.gz
1.6 配置nginx
[root@server1 ~]# cd nginx-1.12.2/
[root@server1 nginx-1.12.2]# ./configure \
--prefix=/usr/local/nginx \
--user=nginx \ #指定其运行时的账户与组
--group=nginx \
--with-http_stub_status_module #将状态模块启用
1.7 编译安装
make && make install
1.8 建立软链接,检查语法
[root@server1 nginx-1.12.2]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ #软链接
[root@server1 nginx-1.12.2]# nginx -t #检查语法
[root@server1 nginx-1.12.2]# nginx #重启服务
[root@server1 nginx-1.12.2]# netstat -anpt | grep nginx #查看服务端口状态
[root@server1 nginx-1.12.2]# killall -1 nginx #安全重启
[root@server1 nginx-1.12.2]# killall -3 nginx #停止服务
做到这里Nginx环境已经部署好了
2.管理Nginx服务
1.制作管理脚本
vi /etc/init.d/nginx
#!/bin/bash
#chkconfig:35 76 21
#description:Nginx Service Control
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
2.给脚本文件授权、设置chkconfig管理nginx服务
[root@server1 ~]# chmod +x /etc/init.d/nginx
[root@server1 ~]# chkconfig --add nginx
[root@server1 ~]# chkconfig --list
3.配置日志级别
[root@server1 ~]# ln -s /usr/local/nginx/conf/nginx.conf /etc/ #软链接
[root@server1 ~]# vi /etc/nginx.conf
[root@server1 ~]# nginx -t
[root@server1 ~]# ulimit -n
[root@server1 ~]# ulimit -n 65535 >> /etc/rc.local
[root@server1 ~]# ulimit -n
会遇到资源数不够需要添加资源数
vi /etc/nginx.conf 修改配置文件
4.配置统计功能
vi /etc/nginx.conf
systemctl stop nginx
systemctl start nginx
添加:
location ~ /status {
stub_status on;
access_log off;
}
5.查看nginx status(状态)详细
访问本机20.0.0.14/status
3.配置nginx的验证功能
[root@server2 ~]# vi /usr/local/nginx/conf/nginx.conf
[root@server2 ~]# nginx -t
[root@server2 ~]# systemctl stop nginx
[root@server2 ~]# systemctl start nginx
添加:
location / {
deny 20.0.0.1/32; #拒绝20.0.0.1访问
allow all; #允许所有访问
auth_basic "secret"; #密文认证
auth_basic_user_file /usr/local/nginx/passwd.db; #用户文件指向usr/local/nginx/passwd.db
}
测试:
因为nginx的执行顺序是从上到下不像apache一样,把拒绝的放前面就直接执行拒绝访问
三、配置虚拟主机功能
1.基于域名
[root@server2 ~]# vi /etc/nginx.conf
[root@server2 ~]# systemctl stop nginx
[root@server2 ~]# systemctl start nginx
添加:
server {
listen 80;
server_name www.nb.com;
charset utf-8;
access_log logs/nb.com.access.log;
location / {
root /var/www/html/nb;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
编写页面
[root@server1 ~]# mkdir -p /var/www/fa
[root@server1 ~]# mkdir -p /var/www/nb
[root@server1 ~]# echo "<h1>This is fa.</h1>" > /var/www/fa/index.html
[root@server1 ~]# echo "<h1>This is nb.</h1>" > /var/www/nb/index.html
[root@server1 ~]# vi /etc/hosts
[root@server1 ~]# curl http://www.fa.com
<h1>This is fa.</h1>
[root@server1 ~]# curl http://www.nb.com
<h1>This is nb.</h1>
测试用域名访问
www.fa.com
www.nb.com
2.基于IP
1.创建虚拟主机
[root@server1 ~]# ifconfig ens33:1 192.168.1.100/24
[root@server1 ~]# ifconfig
[root@server1 ~]# vi /etc/nginx.conf
[root@server1 ~]# systemctl stop nginx
[root@server1 ~]# systemctl start nginx
[root@server1 ~]# curl http://20.0.0.13
<h1>This is fa.</h1>
[root@server1 ~]# curl http://192.168.1.100
<h1>This is nb.</h1>
测试:
20.0.0.13
192.168.1.100
3.基于端口
[root@server1 ~]# vi /etc/nginx.conf
[root@server1 ~]# systemctl stop nginx
[root@server1 ~]# systemctl start nginx
[root@server1 ~]# netstat -anpt | grep nginx
[root@server1 ~]# curl http://20.0.0.13:80
<h1>This is fa.</h1>
[root@server1 ~]# curl http://192.168.1.100:8080
<h1>This is nb.</h1>
测试:
20.0.0.13:80
192.168.1.100:8080