抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

Nginx Explain

Nginx是一款高性能低损耗的轻量级web服务器,同时支持http、smtp、pop3协议的反向代理

Nginx Speciality:

a.基于模块化的设计,且有较好的扩展性
b.支持在线升级、rewrite、alias、proxy
c.较其他web服务器来说是一款轻量级的服务器
d.支持缓存加速和负载均衡
e.支持事件驱动以及IO复用模型
f.支持fastcgi,uWSGI
g.支持ssl、用户/IP认证

Nginx工作模式

非阻塞模式、nginx在启动之后,由一个master进程生成多个worker线程,每个worker线程响应于n个请求

Nginx配置文件

注:Nginx配置文件当中要以“;”结尾
main:全局配置段
    user:指明nginx进程的用户和组
        例:user nginx nginx;
    worker_processes:指明启动#的master进程
        例:worker_processes 1; #即启动一个主进程
    pid:指名pid守护进程的文件
    error_log:指明错误日志的存放路径
        例:error_log /var/log/nginx/error.log info; #配置段 文件路径 日志级别
    worker_rlimit:指明所有worker进程所能够打开的最大文件数
    worker_rlimit_core:指明所有worker进程能够打开文件的总大小
    worker_cpu_affinity:设定将worker主进程绑定在哪个CPU上以避免较多的上下文切换绑定在单一cpu的主要作用并不是为了避免让系统发生上下文切换,而是为了在发生上下文切换时能够提高命中率,以降低损耗)
    worker_priority:指定worker进程的nice值(range:-20...19)
http:定义http相关的配置段
    server {}:定义虚拟服务器的名称
        listen:指明用以监听的IP地址或端口
        server_name:指明服务器的名称(可以是IP、域名)
        location{}:用来定义请求的URI的配置(能够用在server、location配置段当中)
            正则匹配条件说明:
                =:精确匹配检查
                ~:正则表达式模式匹配检查且区分字符大小写
                ~*:正则表达式模式匹配检查且不区分字符大小写
                ^~:URI的前半部分匹配,不支持正则表达式
            example:
                server{
                    listen 80;
                    server_name www.test.com;
                    location /images {
                        root /vhot/web;
                    }
                    location ~* \.php$ {
                        fcgipass;
                    }
                }
        alias:只能用与location配置段当中,定义指定路径的别名
            location /dir {
                alias /test/web;
            }
            注解:当访问http://www.test.com/dir时,会跳入到/test/web当中的页面
        error_page:能用于http、server、location配置段当中
            更具error_page后跟的状态码来返回一个页面
        访问控制:
            基于IP:
                allow IP/Network;
                deny IP/Network;
            基于用户:
                auth_basic "";
                auth_basic_user_file FILENAME;
event:定义event模型的工作特性
    accept_mutex on|off:master调度用户请求至各worker进程时使用的负载均衡锁
    accept_mutex_delay :延迟等待时间(前提条件是accept_mutex的值为on)
    use method {epoll|trsig|select|poll}:定义event使用的模型
    worker_connections #:定义worker的连接数

Nginx 安装方式

编译安装:
    a.获取压缩包
        可以通过wget直接获取亦可手动下载并上传至服务器中
    b.解压获取的包
        tar xf nginx-1.18.0.tar.gz
        ln -sv nginx-1.18.0 nginx(做软连接) 
    c.环境准备
        yum -y install pcre-devel zlib-devel
        yum groupinstall Development Tools
    d.编译安装
        ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module
        configure完成后注意查看最后的摘要信息:
            Configuration summary
              * using system PCRE library
              * using system OpenSSL library
              * using system zlib library
              nginx path prefix: "/usr/local/nginx"
              nginx binary file: "/usr/local/nginx/sbin/nginx"
              nginx modules path: "/usr/local/nginx/modules"
              nginx configuration prefix: "/usr/local/nginx/conf"
              nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
              nginx pid file: "/usr/local/nginx/logs/nginx.pid"
              nginx error log file: "/usr/local/nginx/logs/error.log"
              nginx http access log file: "/usr/local/nginx/logs/access.log"
              nginx http client request body temporary files: "client_body_temp"
              nginx http proxy temporary files: "proxy_temp"
              nginx http fastcgi temporary files: "fastcgi_temp"
              nginx http uwsgi temporary files: "uwsgi_temp"
              nginx http scgi temporary files: "scgi_temp"
        安装:
            make && make install
    e.配置nginx的启动脚本
        cp -a /usr/lib/systemd/system/httpd.service /usr/lib/systemd/system/nginx.service
        vim /usr/lib/systemd/system/nginx.service
            [Unit]
            Description=The Nginx Service
            After=network.target remote-fs.target nss-lookup.target
            Documentation=http://nginx.org/en/docs/
            [Service]
            Type=forking
            PIDFile=/usr/local/nginx/logs/nginx.pid
            ExecStart=/usr/local/nginx/sbin/nginx
            ExecReload=/usr/local/nginx/sbin/nginx -s reload
            ExecStop=/usr/local/nginx/sbin/nginx -s stop
            PrivateTmp=true
            [Install]
            WantedBy=multi-user.target
        cp -a /usr/local/nginx/sbin/nginx /usr/sbin/nginx
        systemctl daemon-reload(重载服务)
        systemctl start nginx
        确认80端口是否被监听:ss -tn: Nginx编译安装及配置文件说明
    f.在浏览器中输入对应的ip及端口即可正常服务

Nginx configure后生成的文件说明

src目录用于存放编译时产生的目标文件
Makefile文件用于编译Nginx工作以及在加入install参数后安装Nginx
autoconf.err保存configure执行过程中产生的结果
ngx_auto_headers.h和ngx_auto_config.h保存了一些宏,这两个头文件会被src/core/ngx_config.h以及src/os/unix/ngx_linux_config.h文件引用
ngx_modules.c是一个关键文件:
    ngx_modules.c文件是用来定义模块的数组的
    ngx_modules是非常关键的数组,它定义了每个模块在Nginx中的调用顺序,当一个请求同时符合多个模块处理规则时,将按照它们在ngx_modules数组中的顺序选择最靠前的模块优先处理。
    http过滤模块则是相反的,因为http在初始化时,会在ngx_modules数组中将过滤模块按先后顺序向过滤链表中添加,但每次都是添加到链表的表头,因此,对http模块来说,在ngx_modules数组中越是靠后的模块反而会首先处理HTTP响应

评论