Nginx
Nginx简介
nginx是一个开源的,支持高性能,高并发的www服务和代理服务软件。它是一个俄罗斯人lgor sysoev开发的,作者将源代码开源出来供全球使用。
nginx比它大哥apache性能改进许多,nginx占用的系统资源更少,支持更高的并发连接,有更高的访问效率。
nginx不但是一个优秀的web服务软件,还可以作为反向代理,负载均衡,以及缓存服务使用。
安装更为简单,方便,灵活。
nginx可以说是非常nb了
Nginx的优点:
- 支持高并发,能支持几万并发连接
- 资源消耗少,在3万并发连接下开启10个nginx线程消耗的内存不到200M
- 可以做http反向代理和负载均衡
- 支持异步网络i/o事件模型epoll
Tengine
Tengine是由淘宝网发起的Web服务器项目。和Nginx的用法一样,它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。
Nginx的安装环境准备
1.下载源码包
wget -c https://nginx.org/download/nginx-1.12.0.tar.gz
2.解压缩源码
进入/opt/目录下
tar -zxvf nginx-1.12.0.tar.gz
3.释放configure
./configure --prefix=/opt/nginx112/
4.编译安装
到nginx112目录下 make && make install
5.启动,关闭,重启nginx
进入sbin目录,找到nginx启动命令
./nginx
#启动
./nginx -s stop
#关闭
./nginx -s reload
#平滑重启 ,修改了nginx.conf之后,可以不重启服务,加载新的配置
Nginx的配置
nginx目录:
conf
存放nginx的配置文件的nginx.conf
里是控制nginx所有功能的文件
html
存放网页html的目录 默认是index.html
logs
存放log日志文件
sbin
存放nginx可执行命令的 nginx脚本命令
nginx.conf 核心配置如下:
worker_processes 5;#定义nginx工作进程数
#error_log logs/error.log;#错误日志
#http定义代码主区域
http {
include mime.types;
default_type application/octet-stream;
#定义nginx的访问日志功能
#nginx会有一个accses.log功能,查看用户访问的记录
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;
keepalive_timeout 65;
gzip on;#开启gzip压缩传输
#虚拟主机1 定义一个 自定义网站
server {
listen 80;#默认监听80端口
#定义网站的域名www.tkktk.tk
#如果没有域名,就填写服务器的ip地址 192.168.xx.xx
server_name www.tkktk.tk;
#nginx的url域名匹配
#只要请求来自于www.tkktk.tk/xxxxx
#最低级的匹配,只要来自于www.woshidouyu.tv这个域名,都会走到这个location
location / {
root html;#这个root参数,也是关键字,定义网页的根目录,可以自由修改这个root定义的网页根目录
#以nginx安装的目录为相对路径 /opt/nginx112/html
index index.html index.htm;#index参数定义网站的首页文件名
}
#错误页面的优化,只要是40x的错误 都会去找40x.html
error_page 400 401 402 403 404 /40x.html;
}
}
nginx多虚拟主机的配置
1.在nginx.conf中添加两个虚拟主机标签 server{}
配置文件如下:
server {
listen 80;
server_name 域名1;
location / {
root /opt/jd;
index index.html index.htm;
}
error_page 404 /40x.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 80;
server_name 域名2;
location / {
root /opt/tb;
index index.html;
}
}
2.重启nginx,加载新的配置
nginx -s stop
nginx
3.修改windows的本地hosts解析文件,用于域名解析
修改hosts文件只是为了用浏览器可以用域名访问到自己的本地服务器,如果用云服务器并且有域名可以忽略
windows的hosts文件路径:
C:\Windows\System32\drivers\etc
写入如下配置
格式: 前面写自己服务器ip 后面写自定义的域名
192.168.11.37 liubei.com
192.168.11.37 guanyu.com
4.准备两个虚拟主机的 index.html文件
/opt/jd/index.html
/opt/tb/index.html
5.在windows浏览器中,查看两个域名对应到的虚拟主机
访问liubei.com 域名
然后访问guanyu.com 域名,查看网站的资料的内容变化
nginx的错误页面优化的功能:
通过error_page参数定义错误页面的 html文件
server {
listen 80;
server_name liubei.com;
location / {
root /opt/myhome;#定义html的文件目录
index index.html index.html;
}
#这个错误页面就应该存放在 /opt/myhome/40x.html
error_page 404 /40x.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
nginx访问日志功能
配置方式
1.修改nginx.conf配置文件,打开如下配置注释
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;
nginx拒绝访问功能
在某一个虚拟主机下,顶一个deny参数,可以拒绝ip地址对虚拟主机的访问
server {
listen 80;
server_name liubei.com;
location / {
deny 192.168.11.0/24;#拒绝这个ip访问
root /opt/jd;
index index.html index.htm;
}
error_page 404 /40x.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
nginx代理功能
代理是什么?
简单来说代理就像狗中介
顾客->中介->房东
1.实验准备,准备2台nginx机器
机器1 192.168.11.37 用作 web服务器,用作数据返回
机器2 192.168.11.167 用作nginx反向代理服务器
在windows中访问 代理服务器,然后让代理服务器 去拿 web服务器的数据
windows > 192.168.11.158 > 192.168.11.37
windows < 192.168.11.158 < 192.168.11.37
1.准备机器1相当于web服务器,只是对数据页面的一个返回
server {
listen 80;
server_name 192.168.11.37;
#charset koi8-r;
location / {
root html;
index index.html index.htm;
}
}
2.准备机器2,用作nginx的反向代理服务器,这个机器不存数据,只转发请求配置如下
server {
listen 80;
server_name 192.168.11.158;
#charset koi8-r;
#access_log logs/host.access.log main;
#只要192.168.11.158/访问 就走location
location / {
proxy_pass http://192.168.11.37;#在这里进行反向代理配置
}
}
nginx负载均衡
负载均衡,顾名思义,就是让多个服务器来分担压力,不至于压力太大造成服务器挂逼
1.集群是什么
一堆服务器做一件事
2.集群性能很高
淘宝本来的核心支付服务器是小型机,非常昂贵,且难以维护
后来都将服务器更换为集群架构
一堆便宜的服务器,维护者一个功能运转
3.高可用
单点机器如果宕机了,整个项目都凉了
集群单机机器宕机,不会影响整体的运转
nginx负载均衡的配置
实验如下
1,准备三台机器
机器1 nginx负载均衡器 192.168.11.158
nginx.conf配置如下
#定义nginx负载均衡池,里面默认是轮训算法,轮训着来分配
#也可以用weight 权重算法,根据配置不同的权重来分配
#也可以用ip_hash算法,同一个ip请求的总是一台服务器,但是第一次分配是随机的
upstream nginx_pools {#这里是均衡池
server 192.168.11.37 weight=10;#weight可以设置权重
server 192.168.11.167 ;
}
server {
listen 80;
server_name 192.168.11.158;
#charset koi8-r;
#access_log logs/host.access.log main;
#在这里进行反向代理配置
#192.168.11.158/
location / {
proxy_pass http://nginx_pools;
}
}
机器2 准备nginx 返回页面数据 192.168.11.37
nginx.conf配置如下
server {
listen 80;
server_name 192.168.11.37;
location / {
root /opt/jd;
index index.html index.htm;
}
error_page 404 /40x.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
机器3 也准备nginx 返回页面数据 192.168.11.167
server {
listen 80;
server_name 192.168.11.167;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
2.分别启动三台机器,三个nginx服务
3.在windows中访问负载均衡器的地址,查看请求分发,
访问 192.168.11.158