nginx相关

安装

  1. 安装依赖
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
  1. 源码安装
 1. 下载源码包
 wget -c https://nginx.org/download/nginx-1.14.2.tar.gz
 2. 解压缩
 tar -zxvf nginx-1.14.2.tar.gz
 3. 配置,编译,安装
 ./configure --prefix=/opt/nginx --with-http_ssl_module --with-http_stub_status_module 
# 配置安装位置,开启ssl和状态模块
make && make install
4. 启动等相关操作
- 启动  /opt/nginx-1.14.2/sbin/nginx
- 关闭 /opt/nginx-1.14.2/sbin/nginx -s stop
- 重新加载 /opt/nginx-1.14.2/sbin/nginx -s reload
- 检测语法 /opt/nginx-1.14.2/sbin/nginx -t

虚拟主机

  1. 基于域名的虚拟主机
server {
    server_name 域名;
    location / {
    	# 指明网页根目录位置,放在虚拟主机中为局部变量,放在外面为全局变量
        root /xxx;
        index index.html index.htm;
    }
}
  1. 基于端口的虚拟主机
  2. 基于ip的虚拟主机

状态(status)配置

Nginx状态信息(status)介绍
Nginx软件在编译时又一个with-http_stub_status_module模块,这个模块功能是记录Nginx的基本访问状态信息,让使用者了解Nginx的工作状态。
要想使用状态模块,在编译时必须增加--with-http_stub_status_module参数。

# 检测nginx是否安装了status模块
/opt/nginx-1.14.2/sbin/nginx -v
# 启动status状态功能,修改配置文件
#在访问ip/status的时候,进入状态功能        
location /status {
        #开启nginx状态功能
             stub_status on;
} 

访问日志

在nginx.conf中开启access_log部分就行。

限制访问指定ip访问

# 限制122.153.xx.xx访问data
locatin /data {
    deny 122.153.xx.xx;
}

匹配模式与顺序

# 优先级从高到低
精确匹配
location = / {
    
}
匹配字符串,不做正则检查
location ^~ /static {
    
}
正则匹配 
location ~* .(gif|jpg|jpeg) {
    
}
匹配常规字符,有正则优先正则
location /staic {
    
}
所有的location都不匹配时的默认匹配
location / {
}

Django与Flask中用法

location / {
    # 动态请求全部给django或flask
    uwsgi_pass http:0.0.0.0:8000;
}
location ~* .(gif|jpg|jpeg|mp3|mp4) {
    # 静态资源全部给nginx处理
    # alias指示静态资源路径 
    alias /data/static;
}

正向代理,反向代理

  1. 正向代理
    正向代理的对象是客户端

  2. 反向代理
    反向代理的对象是服务端
    server {
    listen 80;
    server_name 域名;
    location / {
    # 将请求转发给其他服务器
    proxy_pass http://128.32.xx.xx;
    }
    }
    nginx代理django或flask服务器是反向代理;
    注:django默认的wsgi模块,性能太低,因此通过支持高并发的uwsgi,启动多进程,去处理用户请求,uwsgi不解析静态资源,所以静态资源需要借助nginx

负载均衡配置

默认是轮询方式

  1. 入口服务器配置:
# 定义负载均衡池,django为均衡池名字
upstream django {
  # 可以设置权重,如:server ip1:port1 weight 2;weight值越大,分配到的几率越大。
  # 使用ip_hash。直接在server ip1:port1;上一行加上ip_hash;即可。注意不能和weight一起用。
   server ip1:port1;
   server ip2:port2;
   ...
}
server {
    listen 80;
    server_name 域名;
    location / {
        proxy_pass http://django;
        # proxy_params文件需要手动创建,包含语法参数,将一个配置文件添加到当前虚拟主机中。
        include /opt/nginx/conf/proxy_params;
    }
}

# 手动创建proxy_params文件,文件中存放代理的请求头相关参数,位置为/opt/nginx/conf/proxy_params
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;

proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;
  1. 负载均衡调度算法
    调度算法    概述
    轮询     按时间顺序逐一分配到不同的后端服务器(默认)
    weight    加权轮询,weight值越大,分配到的访问几率越高
    ip_hash    每个请求按访问IP的hash结果分配,这样来自同一IP的固定访问一个后端服务器。根据客户端ip哈希分配,不能和weight一起用
    url_hash   按照访问URL的hash结果来分配请求,是每个URL定向到同一个后端服务器
    least_conn 最少链接数,那个机器链接数少就分发

优点

  • 支持高并发,能支持几万并发连接
  • 资源消耗少,在3万并发连接下开启10个nginx线程消耗的内存不到200M
  • 可以做http反向代理和负载均衡
  • 支持异步网络I/O时间模型epoll
原文地址:https://www.cnblogs.com/tmdhhl/p/10828208.html