nginx

1.nginx是什么

nginx比它大哥apache性能改进许多,nginx占用的系统资源更少,支持更高的并发连接,有更高的访问效率。
nginx不但是一个优秀的web服务软件,还可以作为反向代理,负载均衡,以及缓存服务使用。

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

2.安装

2.1.安装环境准备

一. gcc 安装
安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装:yum install gcc-c++

二. PCRE pcre-devel 安装
yum install -y pcre pcre-devel

三. zlib 安装
yum install -y zlib zlib-devel

四. OpenSSL 安装
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

2.2.安装,启动nginx

1.下载源码包
wget -c https://nginx.org/download/nginx-1.12.0.tar.gz
2.解压缩源码
tar -zxvf nginx-1.12.0.tar.gz
3.配置,编译安装  开启nginx状态监测功能
./configure --prefix=/opt/nginx1-12/ --with-http_ssl_module --with-http_stub_status_module 
make && make install 
4.启动nginx,进入sbin目录,找到nginx启动命令
cd sbin
./nginx #启动
./nginx -s stop #关闭
./nginx -s reload #重新加载

2.3.安装完成后检测服务

netstat -tunlp |grep 80
curl -I 127.0.0.1
#如果访问不了,检查selinux,iptables

3.nginx目录及配置

3.1目录结构

conf 存放nginx所有配置文件的目录,主要nginx.conf,此文件极其重要
html 存放nginx默认站点的目录,如index.html、error.html等
logs 存放nginx默认日志的目录,如error.log access.log
sbin 存放nginx主命令的目录,sbin/nginx

3.2多虚拟主机功能(都是在nginx.conf中配置)

先改变本地hosts文件C:\Windows\System32\drivers\etc\hosts

第一个虚拟主机 www.s24pian.com
server { #定义网站的端口 listen 80; #定义网站匹配的域名 server_name www.s24pian.com; #server_name _; #server_name www.s24python.com; #定义虚拟主机的访问日志功能,记录用户的ip,以及请求信息,和爬虫代理后面的真实ip等功能 #access_log logs/host.access.log main; #access_log "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G" main; # location作用是匹配url,如同 django的 url.py功能一样 # 最低级匹配,当请求时 192.168.16.85:81/ 就进入如下location location / { #这个root关键词 是定义静态文件存放目录的 root /opt/s24pian; #index参数,定义网站首页文件名的 index index.html index.htm; } #alias是别名,当访问0.0.0.0/static/1.jpg时会去/opt/s24crm/static1/1.jpg找,当为root时会拼接上static访问路径为/opt/s24crm/static1/static/1.jpg找 location /static { #给路径添加别名 alias /opt/s24crm/static1/; } } 第二个虚拟主机 www.s24lol.com server { listen 80; server_name www.s24lol.com; location / { root /opt/s24lol; index index.html; } }

3.3nginx的访问日志功能(将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;
access_log  "pipe:rollback logs/access_log interval=1d baknum=7 maxsize=2G"  main;

3.4错误页面优化(找到server{}标签的配置,添加error_page 404 /404.html),然后在指定html中添加自己想要的样式

location / {
    #这个root关键词 是定义静态文件存放目录的
    root   /opt/s24pian;
    #index参数,定义网站首页文件名的 
    index  index.html index.htm;
     }
    #nginx错误页面的定义
    error_page  404              /404.html;

4.nginx配置反向代理

什么是反向代理?

在此,简单了解一下,正向代理就是为客户端代理,举个例子,如果想要访问国外网站,需要通过VPN等一些代理软件。相反,反向代理就是为服务器代理,我们学的nginx服务器就是。

可参考博客:https://www.cnblogs.com/xudong-bupt/p/8661523.html

nginx配置反向代理

server {
        listen       80;
        server_name  _;
        location / {
        #反向代理的参数 
        proxy_pass   http://127.0.0.1:81;
        }
        error_page  404              /404.html;
    }

5.负载均衡

nginx的反向代理和负载均衡通常结合使用

nginx.conf配置文件如下:

#通过upstream关键词,定义服务器地址池
    upstream  s24server  {
    server  127.0.0.1:81;
    server  127.0.0.1:82;
    server  127.0.0.1:83;
    }

       #定义第一个虚拟主机 server{} ,功能是 进行反向代理,负载均衡 
       server {
            listen 80;
            server_name _;
            location  /  {
            proxy_pass http://s24server;
    }

    }
    #第二个server,模拟第一台django
    server  {
    listen  81;
    server_name _;
    location  /  {
        root  /opt/s24django1;
        index  index.html;
    }
    }
    #定义第三个server,模拟第二台django
    server {
      listen 82;
    server_name  _;
    location  / {
      root  /opt/s24django2;
      index  index.html;
    }
    }

    #定义第四个server,模拟第三台django,讲道理,这三台django应该提供一样的数据 
    server {
      listen 83;
    server_name  _;
    location  / {
      root  /opt/s24django3;
      index  index.html;
    }
    }

nginx的负载均衡规则

1.轮训机制 ,每个机器,解析一次
    2.权重机制 ,哪台机器的权重高,请求优先发给谁,有权重比例设置
            upstream  s24server  {
        server  127.0.0.1:81 weight=1;
        #server  127.0.0.1:82 weight=3;
        server  127.0.0.1:83 weight=4;
        }

    3.ip_hash  ,真对用户的ip地址得到哈希值,永久发给一台机器 ,ip哈希方式,不得和权重一起用 
        #通过upstream关键词,定义服务器地址池
        upstream  s24server  {
        server  127.0.0.1:81 ;
        #server  127.0.0.1:82 ;
        server  127.0.0.1:83 ;
        ip_hash;
        }

6.注意

1.nginx配置中proxy_pass对应http,uwsgi_pass对应socket
2.如果想要在不同机器之间以域名方式传送:需要proxy_set_header host $http_host;($host仅仅是ip,默认以ip方式传送)

7.nginx不同的server配置不同log_format

如果每个不同server的日志想要不同的log_format,在log_format中的参数要保持一致。当一个nginx配置文件中有多个log_format时,如果access_log应用了日志格式名称main1,日志格式就是main1,如果没有应用任何,会应用默认的log_format,而非自定义的默认log_format

#nginx.conf
http { include mime.types; default_type application/octet-stream; log_format main1 '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main1; #此处生成的日志格式就是引用了参数为main1的 sendfile on; tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf/conf.d/00_global_backend.conf; include /etc/nginx/conf/conf.d/test.conf; #test.conf server { server_name csdata2.org; access_log /10_journals.log global_main; #此处global_main表示着使用参数为global_main的log_format default_type 'text/html'; charset utf-8; server_name_in_redirect on; client_max_body_size 1024m; location / { #root html; #index index.html; proxy_pass http://backend_a; proxy_redirect off; proxy_buffering off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } #00_global_backend.conf(此文件先定义了global_main参数,在nginx.conf中要先引入) upstream backend_a { #ip_hash; server xxxx; server xxxx backup; } log_format global_main '$http_host $remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';

参考:https://www.cnblogs.com/kevingrace/p/5893499.html

nginx -v 查看nginx版本 nginx -V查看nginx编译安装的模块