nginx

Posted 虫萧

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx相关的知识,希望对你有一定的参考价值。

web服务:apache、iis(Windows下的)、nginx

目录结构

[root@localhost nginx]#ls
conf  html  logs  sbin
conf 配置文件
html 存放静态文件 index.html 是默认的欢迎页面
logs 日志目录
sbin 二进制文件
启动以后会生成一个主进程,根据配置文件的选项来生成子进程(工作进程),主进程不负责处理用户的请求,用来转发用户的请求,真正负责处理用户请求的是子进程

命令格式

./sbin/nginx -h
nginx version: nginx/1.16.1
Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives]

Options:
  -?,-h         : this help
  -v            : show version and exit 显示版本号
  -V            : show version and configure options then exit 显示版本+编译时选项
  -t            : test configuration and exit  测试配置文件
  -T            : test configuration, dump it and exit
  -q            : suppress non-error messages during configuration testing
  -s signal     : send signal to a master process: stop, quit, reopen, reload
  -p prefix     : set prefix path (default: /opt/nginx/)
  -c filename   : set configuration file (default: conf/nginx.conf)
  -g directives : set global directives out of configuration file

配置文件

#user  nobody;    使用哪个用户来启动子进程
worker_processes  1; #工作进程的个数,配置成cpu的核心数-1或者-2
# cpu亲缘性绑定,让nginx的子进程工作在哪个核心上

#
error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#
pid        logs/nginx.pid;


events {
    #use [epoll|select|poll];
    worker_connections  102400; # 每一个子进程可以处理的连接数
}


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;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65; # 保持长连接的超时时间

    #gzip  on;

    server {
        listen       80; #监听端口
        server_name  localhost; 

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;  # 指定静态文件地址
            index  index.html index.htm; # 指定默认的index页面
        }
        # 错误页面 找不到页面
        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        # 错误页面 服务端错误
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the php scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

404页面

error_page  404              /404.html;

root和alias的区别

 location /img {
     root /data/img;
 }
root /data/img 里面必须有/img
 location /img {
     alias /data/img;
 }
 alias /data/img 里面不需要有 /img

域名

server_name ms.s22.com

多域名访问

  server  {
        listen 80;
        server_name www.taobao.com taobao.com;
        location / {
        root /data/taobao;
        index index.html;
        }

}
   server  {
        listen 80;
        server_name www.jd.com jd.com;
        location / {
        root /data/jd;
        index index.html;
        }
        }

默认server

listen 80 default_server;

nginx的日志

 #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;
remote_addr 访问ip地址
remote_user 访问的用户
time_local 本地时间
request 包括请求方式  请求地址  请求协议版本
status 状态码
body_bytes_sent 发送的大小
http_user_agent 用户的请求头
http_x_forwarded_for

禁止访问

可以写在server或者location里面
deny 192.168.21.1;
allow 192.168.21.131;
deny 192.168.21.0/24;

反向代理

  • 起到保护网站安全的作用

  • 可以缓存静态文件

  • 实现负载均衡 F5 A10 lvs haproxy  nginx

upstream django {
        server 192.168.21.128:81;
}
 server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
        proxy_pass http://django;
        }

权重

weight

upstream django {
    server 192.168.21.128:81 weight=3;
    server 192.168.21.131:81
}
 server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
        proxy_pass http://django;
        }
        }
得到的结果是:
访问128的3次,才访问131的一次

ip_hash

每个请求的ip做hash运算,这样每个固定的访客都会被负载到后端固定的机器

upstream django {
    ip_hash;
    server 192.168.21.128:81
    server 192.168.21.131:81
}

backup

当前面的都访问不到,则请求backup的备份,只要有一个通,则不会走backup

upstream django {
    server 192.168.21.128:81;
    server 192.168.21.131:81;
    server 192.168.21.131:82 backup;
}

nginx location匹配规则

location = / {
    精确匹配/ ,后面不能带其他的东西
    [ configuration A ]
}

location / {
    所有的以/开头的地址
    [ configuration B ]
}

location /documents/ {
    只匹配/documents/
    [ configuration C ]
}

location ^~ /images/ {
    # 匹配以/images/开头。
    ~严格大小写
    [ configuration D ]
}

location ~* \.(gif|jpg|jpeg)$ {
    以(gif|jpg|jpeg)结尾的文件
    ~* 不区分大小写
    [ configuration E ]
}
优先级
= > 完整路径 > ^~ > /

location分离

server  {

        listen 80 ;
        server_name www.taobao.com taobao.com;
        location / {
        proxy_pass http://192.168.21.131:82;
        }
        location ~*\.(jpg|gif|png)$ {
        root /data/img;
        }

status

location /status {
    stub_status on;
}

压缩

gzip on
提高响应速度,节省带宽

WSGI

django自带的wsgiref 在调试模式下使用的wsgi的文件,网关接口,协议

uwsgi:协议

uWSGI:具体实现方式

安装

pip3 install uwsgi -i https://pypi.douban.com/simple

准备django程序

启动

cd django目录
uwsgi --http :8080 --module mysite.wsgi

配置文件格式

conf
py
cnf
xml
json
ini
yaml

配置文件启动

[uwsgi]
http = :8080
#项目路径
chdir= /data/mysite
# uwsgi的文件
wsgi-file= mysite/wsgi.py
# 虚拟环境
# virtualenv = /root/env
# 进程个数
processes = 2
# 线程个数
threads=2
# 后台启动,指定日志的输出
daemonize=/data/mysite/django.log
# 清除临时文件
vacuum = true
# python文件发生改变自动重启
py-autoreload=1

uwsgi --ini file

nginx的配置文件

server {
    listen 80;
    server_name crm.oldboy.com;
    location / {
        proxy_pass http://127.0.0.1:8080;
    }
    location /static {
        root /data/supercrm;
    }
}

在django的配置中要写入

SATAIC_ROOT=os.path.join(BASE_DIR,'static/')

执行命令

python3 manager.py collectstatic #用来收集静态文件

第二种配置方式

uwsgi
socket= :9090
nginx的配置文件
location / {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:8080;
}

第三种配置方式

uwsgi
socket = file.sock
nginx的配置文件
location /{
    include uwsgi_params;
    uwsgi_pass unix://file.sock
}


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

将 nginx rtmp 片段发送到 WebRTC

text 有用的nginx命令和片段

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

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

Nginx 跨域

Nginx配置文件详细介绍