Nginx

nginx

nginx是一个开源的,支持高性能,高并发的www服务和代理服务软件。它是一个俄罗斯人lgor sysoev开发的,作者将源代码开源出来供全球使用。
nginx比它大哥apache性能改进许多,nginx占用的系统资源更少,支持更高的并发连接,有更高的访问效率。
nginx不但是一个优秀的web服务软件,还可以作为反向代理,负载均衡,以及缓存服务使用。

支持高并发,能支持几万并发连接
资源消耗少,在3万并发连接下开启10个nginx线程消耗的内存不到200M
可以做http反向代理和负载均衡
支持异步网络i/o事件模型epoll
参考博客:https://www.cnblogs.com/pyyu/p/9468680.html

安装

# tengine: 淘宝nginx

1.下载源码包    # yum remove nginx -y
http://tengine.taobao.org/download/tengine-2.2.0.tar.gz

2.解决依赖软件
yum install gcc patch libffi-devel python-devel  zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel openssl openssl-devel -y

3.解压压缩包,安装
tar -zxvf tengine-2.2.0.tar.gz
1) 释放makefile
./configure --prefix=/opt/tnginx
2) 编译nginx
make
3) 安装
make install

4.使用tnginx
./nginx   # 启动nginx

目录结构:
drwxr-xr-x. 2 root   root 4096 Mar 11 08:50 conf            # 存放nginx所有配置文件
drwxr-xr-x. 2 root   root   40 Mar 11 08:50 html            # 存放前端 html文件     
drwxr-xr-x. 2 root   root   41 Mar 11 08:52 logs            # nginx的日志文件夹
drwxr-xr-x. 2 root   root   35 Mar 11 08:50 sbin            # 存放nginx二进制命令
    
5.修改环境变量PATH变量,快捷使用nginx命令
vim /etc/profile
PATH="/opt/python36/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/tnginx220/sbin"

6.nginx的主配置文件nginx.conf

# 公共的配置定义在http{}
http {  # http层开始
...    
    # 使用Server配置网站, 每个Server{}代表一个网站(简称虚拟主机)
    'server' {
        listen       80;            # 监听端口, 默认80
        server_name  localhost;     # 提供服务的域名或主机名
        access_log host.access.log  # 访问日志
        # 控制网站访问路径
        'location' / {
            root   /usr/share/nginx/html;   # 存放网站代码路径
            index  index.html index.htm;    # 服务器返回的默认页面文件
        }
        # 指定错误代码, 统一定义错误页面, 错误代码重定向到新的Locaiton
        error_page   500 502 503 504  /50x.html;
    }
    ...
    # 第二个虚拟主机配置
    'server' {
    ...
    }
    include /etc/nginx/conf.d/*.conf; # 包含/etc/nginx/conf.d/目录下所有以.conf结尾的文件
}   # http层结束

基于域名的多虚拟主机实战

1. 环境准备, 准备好2个域名, 模拟的本地域名解析,找到windows中的hosts文件     
C:\Windows\System32\drivers\etc\hosts
	- 192.168.11.229  s17dnf.com 
	- 192.168.11.229  s17xiaohua.com

2.配置nginx支持多虚拟主机
# 在nginx.conf中修改2个server虚拟主机的配置

# dnf的虚拟主机
server {
    listen 80;
    server_name  s17dnf.com;
    # 当我们访问s17dnf.com:80/的时候,就进入这个虚拟主机,且找到这个location,进行网站资源分配
    location / {
        root /opt/s17dnf/;
        index index.html;
    }
}

#第二个虚拟主机,s17校花网
server{
    listen 80;
    server_name  s17xiaohua.com;
    location / {
        root /opt/s17xiaohua/;
        index index.html;
    }
}

3.创建两个网址的根目录数据
mkdir -p /opt/{s17dnf,s17xiaohua}

4.创建html页面
/opt/s17dnf/index.html 
/opt/s17xiaohua/index.html  

5.检测语法
nginx -t

6.平滑加载nginx(不重启nginx,重新读取配置文件)
nginx -s reload

7.在windows中测试两个地址

nginx访问日志

# 编辑nginx.conf, 打开注释

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;  开启日志功能
    
- log_format    # 记录日志的格式,可定义多种格式
- accsss_log    # 指定日志文件的路径以及格式

nginx限制网站来源IP访问

  location / {
            deny  192.168.11.110;    # 设置要限制访问的ip地址
            root   /opt/s17dnf;
            index  index.html index.htm;
        }

Nginx错误页面优化

# 编辑nginx.conf ,配置

 server {
        listen       80;
        server_name  s17dnf.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   /opt/s17dnf;
            index  index.html index.htm;
        }
        # 打开参数的配置,开启错误页面  
        error_page  404 403 402 401    /40x.html;
     
# 在相对应的文件下(/opt/s17dnf中)创建 touch 40x.html页面

反向代理

1.实验环境准备
    192.168.11.229   真实资源服务器(主服务器),模拟django
    192.168.11.136   nginx代理服务器 
    
2.思路
当客户端访问代理服务器时,如果代理服务器不存在客户想要的资源,则会进行访问资源服务器(真实的服务器),资源服务器接收到请求,将资源返回给代理服务器,再由代理服务器返回给客户端.
    
3.配置 资源服务器  192.168.11.229  s17dnf.com   
    
4.配置代理服务器   192.168.11.136     
  修改 192.168.11.136机器的nginx配置文件,开启反向代理
  配置nginx.conf的server{}如下
    
        server {
            listen       80 default_server;
            listen       [::]:80 default_server;
            server_name  _;
          
            location / {
            # 反向代理参数,当请求192.168.11.136的时候,进入server,然后location进行资源分配 
                proxy_pass   http://192.168.11.229;   # 间接的访问192.168.11.229:80/
            }
       } 

Nginx负载均衡

Web服务器,直接面向用户,往往要承载大量并发请求,单台服务器难以负荷,我使用多台WEB服务器组成集群,前端使用Nginx负载均衡,将请求分散的打到我们的后端服务器集群中,实现负载的分发。那么会大大提升系统的吞吐率、请求性能、高容灾.

Nginx要实现负载均衡需要用到proxy_pass代理模块配置, Nginx负载均衡与Nginx代理不同地方在于Nginx代理仅代理一台服务器, 而Nginx负载均衡则是将客户端请求代理转发至一组upstream虚拟服务池, Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用。

实现

1.配置nginx负载均衡
# 环境准备,三台服务器,(都是通过nginx实现的)
192.168.11.136   # 反向代理服务器  
192.168.11.229   # 资源服务器1   
192.168.11.176   # 资源服务器2 

2.配置反向代理服务器 192.168.11.136
# 配置nginx.conf, 定义负载均衡池 server区域-> location配置中-> 添加proxy_pass
upstream server {
server 192.168.11.229;
server 192.168.11.176;
}

# 转发请求给负载均衡池
location / {
	proxy_pass   http://server;
	}

3.通过负载均衡器 192.168.11.136, 进行访问测试, 默认是轮询机制

# 注意: 两台资源服务器都要添加html页面
* nginx负载均衡算法 *

调度算法
轮询        # 按时间顺序逐一分配到不同的后端服务器(默认)
weight        # 加权轮询,weight值越大,分配到的访问几率越高
ip_hash       # 每个请求按访问IP的hash结果分配,这样来自同一IP的固定访问一个后端服务器
url_hash      # 按照访问URL的hash结果来分配请求,是每个URL定向到同一个后端服务器
least_coon    # 最少链接数,那个机器链接数少就分发

例如: 
upstream s17server {
    server 192.168.11.229 weight=8;
    server 192.168.11.176 weight=2;
    }

注意: 
1.轮询(不做配置,默认轮询)
2.weight权重(优先级)
3.ip_hash配置,根据客户端ip哈希分配,不能和weight一起用
posted @ 2019-06-28 08:53  言值  阅读(115)  评论(0编辑  收藏  举报