Nginx

Posted 清晨的博客...

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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:WindowsSystem32driversetc

写入如下配置

格式: 前面写自己服务器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

以上是关于Nginx的主要内容,如果未能解决你的问题,请参考以下文章

将 nginx rtmp 片段发送到 WebRTC

text 有用的nginx命令和片段

linux学习:Nginx--常见功能配置片段与优化-06

HLS NGINX-RTMP [错误] 1281#0:* 58 hls:强制片段拆分:10.002 秒

Nginx 跨域

Nginx配置文件详细介绍