ngix 订阅
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。 展开全文
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
信息
软件类型
开源软件,网页服务器软件
最新生产版本
1.18.0 [1]
别    名
engine x
最新主线版本
1.19.1 [1]
中文名
nginx
软件许可
BSD许可
外文名
Nginx
兼容性
Linux系统,Windows NT系统,OS X
nginx优点
Nginx 可以在大多数 UnixLinux OS 上编译运行,并有 Windows 移植版。 Nginx 的1.4.0稳定版已经于2013年4月24日发布,一般情况下,对于新建站点,建议使用最新稳定版作为生产版本,已有站点的升级急迫性不高。 Nginx 的源代码使用 2-clause BSD-like license。Nginx 是一个很强大的高性能Web和反向代理服务,它具有很多非常优越的特性:在连接高并发的情况下,Nginx是Apache服务不错的替代品:Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达 50,000 个并发连接数的响应,感谢Nginx为我们选择了 epoll and kqueue作为开发模型。Nginx作为负载均衡服务:Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP代理服务对外进行服务。Nginx采用C进行编写,不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多。处理静态文件,索引文件以及自动索引;打开文件描述符缓冲。无缓存的反向代理加速,简单的负载均衡和容错。FastCGI,简单的负载均衡和容错。模块化的结构。包括 gzipping, byte ranges, chunked responses,以及 SSI-filter 等 filter。如果由 FastCG或其它代理服务器处理单页中存在的多个 SSI,则这项处理可以并行运行,而不需要相互等待。支持 SSL 和 TLSSNI。 [2]  Nginx代码完全用C语言从头写成,已经移植到许多体系结构和操作系统,包括:Linux、FreeBSD、Solaris、Mac OS X、AIX以及Microsoft Windows。Nginx有自己的函数库,并且除了zlib、PCRE和OpenSSL之外,标准模块只使用系统C库函数。而且,如果不需要或者考虑到潜在的授权冲突,可以不使用这些第三方库。作为邮件代理服务:Nginx 同时也是一个非常优秀的邮件代理服务(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm 描述了成功并且美妙的使用经验。Nginx 是一个安装非常的简单、配置文件非常简洁(还能够支持perl语法)、Bug非常少的服务。Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够不间断服务的情况下进行软件版本的升级。
收起全文
精华内容
下载资源
问答
  • nginx

    万次阅读 2021-02-01 17:42:30
    nginx指定域名访问及隐藏版本信息 相关信息 服务器:centos7.6 nginx:1.16.1(使用yum install nginx -y直接安装的) #1、只能通过指定域名访问服务器 修改后systemctl reload nginx重载配置即可。 这样就存在...

    nginx指定域名访问及隐藏版本信息

    相关信息
    服务器:centos7.6
    nginx:1.16.1(使用yum install nginx -y直接安装的)

    默认的配置
    如果请求头不是'xxx.com'则返回404
    修改后systemctl reload nginx重载配置即可。

    修改之后访问
    这样就存在安全风险,如果别人知道你nginx的版本去针对的查存在的漏洞,则容易被攻击。
    在http{}中添加这个参数即可关闭nginx的版本显示
    修改参数之后访问如图

    展开全文
  • Nginx

    万次阅读 2020-01-26 18:50:56
    Nginx 安装配置 Nginx(“engine x”)是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 在高连接并发的情况下,Nginx是Apache服务器不错的替代...

    Nginx 安装配置

    Nginx(“engine x”)是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。
    在高连接并发的情况下,Nginx是Apache服务器不错的替代品。

    Nginx 安装

    系统平台:CentOS release 6.6 (Final) 64位。

    一、安装编译工具及库文件

    yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

    二、首先要安装 PCRE

    PCRE 作用是让 Nginx 支持 Rewrite 功能。
    1、下载 PCRE 安装包,下载地址: http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz
    [root@bogon src]# cd /usr/local/src/
    [root@bogon src]# wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz
    在这里插入图片描述
    2、解压安装包:
    [root@bogon src]# tar zxvf pcre-8.35.tar.gz
    3、进入安装包目录
    [root@bogon src]# cd pcre-8.35
    4、编译安装
    [root@bogon pcre-8.35]# ./configure
    [root@bogon pcre-8.35]# make && make install
    5、查看pcre版本
    [root@bogon pcre-8.35]# pcre-config --version
    在这里插入图片描述

    Nginx 配置

    创建 Nginx 运行使用的用户 www:
    [root@bogon conf]# /usr/sbin/groupadd www
    [root@bogon conf]# /usr/sbin/useradd -g www www
    配置nginx.conf ,将/usr/local/webserver/nginx/conf/nginx.conf替换为以下内容
    [root@bogon conf]# cat /usr/local/webserver/nginx/conf/nginx.conf

    user www www;
    worker_processes 2; #设置值和CPU核心数一致
    error_log /usr/local/webserver/nginx/logs/nginx_error.log crit; #日志位置和日志级别
    pid /usr/local/webserver/nginx/nginx.pid;
    #Specifies the value for maximum file descriptors that can be opened by this process.
    worker_rlimit_nofile 65535;
    events
    {
    use epoll;
    worker_connections 65535;
    }
    http
    {
    include mime.types;
    default_type application/octet-stream;
    log_format main '$remote_addr - r e m o t e u s e r [ remote_user [ remoteuser[time_local] “KaTeX parse error: Double superscript at position 27: … '̲status b o d y b y t e s s e n t " body_bytes_sent " bodybytessent"http_referer” ’
    ‘"$http_user_agent" $http_x_forwarded_for’;

    #charset gb2312;

    server_names_hash_bucket_size 128;
    client_header_buffer_size 32k;
    large_client_header_buffers 4 32k;
    client_max_body_size 8m;

    sendfile on;
    tcp_nopush on;
    keepalive_timeout 60;
    tcp_nodelay on;
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
    fastcgi_buffer_size 64k;
    fastcgi_buffers 4 64k;
    fastcgi_busy_buffers_size 128k;
    fastcgi_temp_file_write_size 128k;
    gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    gzip_http_version 1.0;
    gzip_comp_level 2;
    gzip_types text/plain application/x-javascript text/css application/xml;
    gzip_vary on;

    #limit_zone crawler KaTeX parse error: Expected 'EOF', got '#' at position 26: …ote_addr 10m; #̲下面是server虚拟主机的配…
    {
    #fastcgi_pass unix:/tmp/php-cgi.sock;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    include fastcgi.conf;
    }
    location ~ .*.(gif|jpg|jpeg|png|bmp|swf|ico)$
    {
    expires 30d;

    access_log off;

    }
    location ~ .*\.(js|css)?$
    {
      expires 15d;
    

    access_log off;

    }
    access_log off;
    

    }

    }
    检查配置文件nginx.conf的正确性命令:
    [root@bogon conf]# /usr/local/webserver/nginx/sbin/nginx -t
    在这里插入图片描述

    启动 Nginx

    Nginx 启动命令如下:
    [root@bogon conf]# /usr/local/webserver/nginx/sbin/nginx在这里插入图片描述

    访问站点

    从浏览器访问我们配置的站点ip:在这里插入图片描述
    Nginx 其他命令
    以下包含了 Nginx 常用的几个命令:
    /usr/local/webserver/nginx/sbin/nginx -s reload # 重新载入配置文件
    /usr/local/webserver/nginx/sbin/nginx -s reopen # 重启 Nginx
    /usr/local/webserver/nginx/sbin/nginx -s stop # 停止 Nginx

    展开全文
  • nginx系列之一:nginx入门

    万次阅读 多人点赞 2019-05-11 17:06:35
    一、nginx 功能介绍 Nginx因为它的稳定性、丰富的模块库、灵活的配置和低系统资源的消耗而闻名.业界一致认为它是Apache2.2+mod_proxy_balancer的轻量级代替者,不仅是因为响应静态页面的速度非常快,而且它的模块...

    前言

    nginx系列之一:nginx入门
    nginx系列之二:配置文件解读
    nginx系列之三:日志配置
    nginx系列之四:web服务器
    nginx系列之五: 负载均衡
    nginx系列之六:cache服务
    nginx系列之七:限流配置
    nginx系列之八:使用upsync模块实现负载均衡

    转自:在此感谢原博主的整理分享

    一、nginx 功能介绍

    Nginx因为它的稳定性、丰富的模块库、灵活的配置和低系统资源的消耗而闻名.业界一致认为它是Apache2.2+mod_proxy_balancer的轻量级代替者,不仅因为响应静态页面的速度非常快,而且它的模块数量是Apache的2/3。对proxy和rewrite模块的支持很彻底,还支持mod_fcgi、ssl、vhosts ,适合用做mongrel clusters前端HTTP响应。
    nginx和Apache一样用模块化设计,nginx模块包括内置模块和第三方模块,其中内置模块中包含主模块和事件模块。

    nginx处理请求逻辑图
    在这里插入图片描述

    二、nginx可以提供的服务

    1. web 服务.
    2. 负载均衡 (反向代理)
    3. web cache(web 缓存)

    三、nginx 的优点

    1. 高并发。静态小文件
    2. 占用资源少。2万并发、10个线程,内存消耗几百M。
    3. 功能种类比较多。web,cache,proxy。每一个功能都不是特别强。
    4. 支持epoll模型,使得nginx可以支持高并发。
    5. nginx 配合动态服务和Apache有区别。(FASTCGI 接口)
    6. 利用nginx可以对IP限速,可以限制连接数。
    7. 配置简单,更灵活。

    四、nginx应用场合

    1. 静态服务器(图片,视频服务),另个lighttpd。并发几万,html,js,css,flv,jpg,gif等。
    2. 动态服务,nginx—fastcgi 方式运行PHP,jsp。(PHP并发约500-1500,MySQL 并发约300-1500)。
    3. 反向代理,负载均衡。日pv2000W以下,都可直接用nginx做代理。
    4. 缓存服务。类似 SQUID,VARNISH。

    五、主流web服务产品对比说明

    5.1 Apache-特性

    1. 2.2版本本身稳定强大,据官方说:其2.4版本性能更强。
    2. prefork模式取消了进程创建开销,性能很高。
    3. 处理动态业务数据时,因关联到后端的引擎和数据库,瓶颈不在与Apache本身。
    4. 高并发时消耗系统资源相对多一些。
    5. 基于传统的select模型。
    6. 扩展库,DSO方法。

    5.2 nginx-特性

    1. 基于异步IO模型(epoll,kqueue),性能强,能够支持上万并发。
    2. 对小文件支持很好,性能很高(限静态小文件1M)。
    3. 代码优美,扩展库必须编译进主程序。
    4. 消耗代码资源比较低。
    5. lighttpd(百度贴吧,豆瓣)
    6. 基于异步IO模式,性能和nginx相近。
    7. 扩展库是SO模式,比nginx要灵活。
      8.通过差距(mod_secdownload)可实现文件URL地址加密。

    5.3 web服务产品性能对比测试

    5.3.1 静态数据性能对比

    1. 处理静态文件Apache性能比nginx和lighttpd要差。
    2. nginx在处理小文件优势明显。
    3. 处理静态小文件(小于1M),nginx和lighttpd比Apache更有优势,lighttpd最强。

    5.3.2 动态数据性能对比

    1. 处理动态内容三者相差不大,主要取决于PHP和数据库压力。
    2. 当处理动态数据时,三者差距不大,从测试结果看,Apache更有优势。这是因为处理动态数据能力取决于PHP和后端数据的提供服务能力。即瓶颈不在web服务器上。
    3. 一般PHP引擎的并发值300-1000,JAVA引擎并发300-1000,数据库并发300-1000.

    5.3.3 为什么nginx总体性能比Apache高。

    1. nginx用最新epoll、kqueue网络IO模型,而Apache使用床头的select模式。
    2. 目前Linux下能承受高并发访问的squid、Memcached 都采用的是epoll网络IO模型。

    5.3.4 如何选择WEB服务器:

    静态业务:高并发、采用nginx,lighttpd,根据自己掌握程度或公司要求。
    动态业务:采用nginx和Apache均可。
    既有静态业务又有动态业务:nginx或Apache,不要多选要单选。
    动态业务可由前端代理(haproxy),根据页面元素的类型,向后转发给相应的服务器处理。
    思想:工作都不要追求一步到位,满足需求的前提下,先用再逐步完善。
    提示:nginx做web(Apache,lighttpd)、反向代理(haproxy、lvs、nat)及缓存服务器(squid)也是不错的。
    最终建议:对外业务nginx,对内业务Apache(yum httpd mysql-server php)。

    六、nginx实战过程

    6.1 安装依赖包

    • nginx安装依赖GCC、openssl-devel、pcre-devel、zlib-devel软件库。
    • Pcre全称(Perl Compatible Regular Expressions),中文perl兼容正则表达式,pcre官方站点
    yum install  pcre pcre-devel -y 
    yum install openssl openssl-devel -y 
    

    6.2 开始编译

    使用./configure --help查看各模块使用情况,用 --without-http_ssi_module 方式关闭不需的模块。可用 --with-http_perl_modules 方式安装需要的模块。

    6.2.1 编译命令

    tar -zxf nginx-1.10.1.tar.gz 
    cd nginx-1.10.1/
    ./configure --prefix=/data/nginx-1.10.1 --user=nginx --group=nginx  --with-http_ssl_module  --with-http_stub_status_module
    
    useradd nginx -M -s /sbin/nologin 
    make && make install 
    ln -s /data/nginx-1.10.1 /data/nginx
    

    6.2.2 测试nginx配置文件是否正常

    /data/nginx/sbin/nginx -t 
    nginx: the configuration file /data/nginx-1.10.1/conf/nginx.conf syntax is ok
    nginx: configuration file /data/nginx-1.10.1/conf/nginx.conf test is successful
    

    6.2.3 启动nginx服务器

    /data/nginx/sbin/nginx  -t  	# 检查配置文件
    /data/nginx/sbin/nginx      	# 确定nginx服务
    netstat -lntup |grep nginx      # 检查进程是否正常
    curl http://localhost           # 确认结果
    

    6.2.4 nginx其他命令

    nginx -s signal
    signal:
    stop — fast shutdown
    quit — graceful shutdown
    reload — reloading the configuration file
    reopen — reopening the log files
    用来打开日志文件,这样nginx会把新日志信息写入这个新的文件中
    

    /data/nginx/sbin/nginx -V 查看已经编译的参数。

    使用kill命令操作nginx。格式:kill -信号 PID

    信号名称

    • TERM,INT 快速关闭
    • QUIT 优雅的关闭,保持吸纳有的客户端连接
    • HUP 重启应用新的配置文件
    • USR1 重新打开日志文件
    • USR2 升级程序
    • WINCH 优雅的关闭工作进程

    例子

    kill -QUIT  `cat /data/nginx/nginx.pid`
    kill -HUP `cat /data/nginx/nginx.pid`
    

    七、nginx配置文件

    配置基础配置文件

    worker_processes  1;
    events {
        worker_connections  1024;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;
        server {
            listen       80;
            server_name  localhost;
            location / {
                root   html;
                index  index.html index.htm;
            }
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    }
    

    测试配置文件是否正常

    shell> /data/nginx/sbin/nginx -t 
    nginx: the configuration file /data/nginx-1.10.3/conf/nginx.conf syntax is ok
    nginx: configuration file /data/nginx-1.10.3/conf/nginx.conf test is successful
    shell> curl -I http://localhost
    HTTP/1.1 200 OK
    

    八、nginx监控

    开启 nginx 监控服务

    8.1 开启状态页

    # 设定查看 Nginx 状态地址   
    location /status {  
      stub_status on;   				# 表示开启stubStatus的工作状态统计功能。
      access_log off;   				# access_log off; 关闭access_log 日志记录功能。
      #auth_basic "status";   		# auth_basic 是nginx的一种认证机制。
      #auth_basic_user_file conf/htpasswd;	# 用来指定密码文件的位置。
    }
    

    8.2 配置登录密码

    yum install -y httpd-tools
    /usr/local/apache/bin/htpasswd -c /data/nginx/conf/htpasswd biglittleant 
    New password:
    

    完成后会在 /data/nginx/conf/ 目录下生成 htpasswd 文件。

    8.3 访问URL

    curl http://127.0.0.1/status
    
    Active connections:  1
    server accepts handled requests
     16 16 18
    Reading: 0 Writing: 1 Waiting: 0
    

    active connections – 活跃的连接数量
    server accepts handled requests — 总共处理了16个连接 , 成功创建16次握手, 总共处理了18个请求
    Reading — 读取客户端的连接数:
    Writing 响应数据到客户端的数量;
    Waiting 开启 keep-alive 的情况下,这个值等于 active – (reading+writing), 即 Nginx 已处理完正在等候下一次请求指令的驻留连接.

    8.3 编写zabbix监控脚本

    nginx_status_fun(){
        NGINX_PORT=$1
        NGINX_COMMAND=$2
        nginx_active(){
            /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'
            }
        nginx_reading(){
            /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'
           }
        nginx_writing(){
            /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
           }
        nginx_waiting(){
            /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
           }
        nginx_accepts(){
            /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/status/" 2>/dev/null| awk NR==3 | awk '{print $1}'
           }
        nginx_handled(){
            /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/status/" 2>/dev/null| awk NR==3 | awk '{print $2}'
           }
        nginx_requests(){
            /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/status/" 2>/dev/null| awk NR==3 | awk '{print $3}'
           }
        case $NGINX_COMMAND in
            active)
                nginx_active;
                ;;
            reading)
                nginx_reading;
                ;;
            writing)
                nginx_writing;
                ;;
            waiting)
                nginx_waiting;
                ;;
            accepts)
                nginx_accepts;
                ;;
            handled)
                nginx_handled;
                ;;
            requests)
                nginx_requests;
            esac 
    }
    

    九、nginx优化

    9.1 nginx内核优化

    net.ipv4.tcp_fin_timeout = 2
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_tw_recycle = 1
    net.ipv4.tcp_syncookies = 1
    net.ipv4.tcp_keepalive_time = 600
    net.ipv4.ip_local_port_range = 4000    65000
    net.ipv4.tcp_max_syn_backlog = 16384
    net.ipv4.tcp_max_tw_buckets = 36000
    net.ipv4.route.gc_timeout = 100
    net.ipv4.tcp_syn_retries = 1
    net.ipv4.tcp_synack_retries = 1
    net.core.somaxconn = 16384
    net.core.netdev_max_backlog = 16384
    net.ipv4.tcp_max_orphans = 16384
    #以下参数是对iptables防火墙的优化,防火墙不开会提示,可以忽略不理。
    net.ipv4.ip_conntrack_max = 25000000
    net.ipv4.netfilter.ip_conntrack_max=25000000
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=180
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait=120
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait=60
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait=120
    

    十、扩展一:nginx全局变量

    • $args:这个变量等于请求行中的参数,同$query_string。
    • $is_args: 如果已经设置$args,则该变量的值为"?",否则为""。
    • $content_length: 请求头中的Content-length字段。
    • $content_type: 请求头中的Content-Type字段。
    • $document_uri: 与$uri相同。
    • $document_root: 当前请求在root指令中指定的值。
    • $host: 请求主机头字段,否则为服务器名称。
    • $http_user_agent: 客户端agent信息。
    • $http_cookie: 客户端cookie信息。
    • $limit_rate: 这个变量可以限制连接速率。
    • $request_method: 客户端请求的动作,通常为GET或POST。
    • $remote_addr: 客户端的IP地址。
    • $remote_port: 客户端的端口。
    • $remote_user: 已经经过Auth Basic Module验证的用户名。
    • $request_body_file`: 客户端请求主体的临时文件名。
    • $request_uri: 请求的URI,带参数
    • $request_filename: 当前请求的文件路径,由root或alias指令与URI请求生成。
    • $scheme: 所用的协议,比如http或者是https,比如rewrite ^(.+)$ $scheme://example.com$1 redirect;
    • $server_protocol: 请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
    • $server_addr: 服务器地址,在完成一次系统调用后可以确定这个值。
    • $server_name: 服务器名称。
    • $server_port: 请求到达服务器的端口号。
    • $request_uri: 包含请求参数的原始URI,不包含主机名,如:/foo/bar.php?arg=baz,它无法修改。
    • $uri: 不带请求参数的当前URI,$uri不包含主机名,如/foo/bar.html可能和最初的值有不同,比如经过重定向之类的。它可以通过内部重定向,或者使用index指令进行修改。不包括协议和主机名,例如/foo/bar.html。

    例子:

    访问链接是:http://localhost:88/test1/test.php 
    网站路径是:/var/www/html
    
    $host:localhost
    $server_port:88
    $request_uri:http://localhost:88/test1/test.php
    $document_uri:/test1/test.php
    $document_root:/var/www/html
    $request_filename:/var/www/html/test1/test.php
    
    

    nginx plus – ngx_http_status_module

    商业版的 nginx plus 通过他的 ngx_http_status_module 提供了比 nginx 更多的监控指标,可以参看 http://demo.nginx.com/status.html

    nginx access log 分析

    nginx 的 access log 中可以记录很多有价值的信息,通过分析 access log,可以收集到很多指标。
    python 编写的 linux 工具 ngxtop 就实现了对 access log 的分析功能。

    NDK – ngx_devel_kit

    NDK 是一个拓展nginx服务器核心功能的模块,第三方模块开发可以基于它来快速实现。NDK提供函数和宏处理一些基本任务,减轻第三方模块开发的代码量。

    nginx lua – lua-nginx-module

    nginx的lua模块,通过这个模块,可以对nginx做定制开发

    十、扩展二:web服务器事件处理模型

    select

    select 最早于1983年出现在4.2BSD中,通过一个select()系统调用来监视多个文件描述符的数组,当select()返回后,该数组中就绪的文件描述符便会被内核修改标志位,使进程可获得这些文件描述符从而进行后续的读写操作。
    select 目前几乎在所有的平台上支持,其良好跨平台支持也是它的一个优点,事实上从现在看来,这也是它所剩不多的优点之一。
    select 的一个缺点在于单个进程能够监视的文件描述符的数量存在最大限制,Linux上一般为1024,不过可通过修改宏定义甚至重新编译内核的方式提升这一限制。
    另外,select()所维护的存储大量文件描述符的数据结构,随着文件描述符数量的增大,其复制的开销也线性增长。同时,由于网络响应时间的延迟使得大量TCP连接处于非活跃状态,但调用 select() 会对所有socket进行一次线性扫描,所以这也浪费了一定开销。

    poll

    poll 在1986年诞生于System V Release 3,它和 select 在本质上没多大差别,但是 poll 没有最大文件描述符数量的限制。
    poll 和select 同样存在的缺点是,包含大量文件描述符的数组被整体复制于用户态和内核的地址空间间,而不论文件描述符是否就绪,它的开销随着文件描述符数量的增加而线性增大。
    另外,select() 和 poll() 将就绪的文件描述符告诉进程后,如果进程没对其进行IO操作,那下次调用 select() 和 poll() 时将再次报告这些文件描述符,所以它们一般不会丢失就绪的消息,这种方式称为水平触发(Level Triggered)。

    epoll

    直到Linux2.6才出现了由内核直接支持的实现方法,就是epoll,它几乎具备之前说的一切优点,被公认为Linux2.6下性能最好的多路I/O就绪通知方法。
    epoll 可同时支持水平触发和边缘触发(Edge Triggered,只告诉进程哪些文件描述符刚刚变为就绪状态,它只说一遍,如果没有采取行动,那它将不会再次告知,这种方式称为边缘触发),理论上边缘触发的性能要更高些,但代码实现相当复杂。
    epoll同样只告知那些就绪的文件描述符,而且当调用epoll_wait()获得就绪文件描述符时,返回的不是实际的描述符,而是个代表就绪描述符数量的值,只需要去epoll指定的一个数组中依次取得相应数量的文件描述符即可,这里也用了内存映射(mmap)技术,这样便彻底省掉了这些文件描述符在系统调用时复制的开销。
    另个本质的改进在于 epoll 采用基于事件的就绪通知方式。在 select/poll 中,进程只有在调用一定的方法后,内核才对所有监视的文件描述符进行扫描,而epoll事先通过 epoll_ctl() 来注册一个文件描述符,一旦基于某个文件描述符就绪时,内核会采用类似 callback 的回调机制,迅速激活这个文件描述符,当进程调用 epoll_wait() 时便得到通知。

    nginx -s reload 过程

    nginx主进程读取配置文件,如果发现配置文件变更,会创建一个新的主进程,然后同时旧的进程,及旧的子进程关闭,旧进程会拒绝新的连接,服务到自己的连接结束,然后关闭。

    Apache select模型和 nginx epoll 模型对比讲解

    Nginx高并发得益于其采用了 epoll 模型,与传统的服务器架构不同,epoll 是linux内核2.6后才出现的。下面通过比较Apache和Nginx工作原理来比较。

    传统Apache都是多进程或者多线程来工作,假设是多进程工作(prefork),apache会先生成几个进程,类似进程池的工作原理,只不过这里的进程池会随着请求数目的增加而增加。对于每一个连接,apache都是在一个进程内处理完毕。具体是 recv(),及根据 URI 去进行磁盘I/O来寻找文件,还有 send()都是阻塞的。其实说白了都是 apche 对套接字的I/O,读或写,但读或写都是阻塞的,阻塞意味着进程得挂起进入sleep状态,那一旦连接数很多,Apache必然要生成更多的进程来响应请求,一旦进程多了,CPU对进程的切换就频繁了,很耗资源和时间,所以导致apache性能下降,处理不过来这么多进程了。其实如果对于进程每个请求都没阻塞,那效率肯定会提高很多。

    Nginx采用 epoll 模型,异步非阻塞。对于Nginx,把一个完整的连接请求处理都划分成了事件,一个个的事件。如accept(), recv(),磁盘I/O,send()等,每部分都有相应的模块去处理,一个完整的请求可能是由几百个模块去处理。真正核心的就是事件收集和分发模块,这就是管理所有模块的核心。只有核心模块的调度才能让对应的模块占用CPU资源,从而处理请求。拿一个HTTP请求来说,首先在事件收集分发模块注册感兴趣的监听事件,注册好后不阻塞直接返回,接下来就不需再管了,等待有连接来了内核会通知你(epoll的轮询会告诉进程),cpu就可处理其他事情去。一旦有请求来,那对整个请求分配相应的上下文(其实已预先分配好),这时再注册新的感兴趣的事件(read函数),同样客户端数据来了内核会自动通知进程可以去读数据了,读数据后就是解析,解析完后去磁盘找资源(I/O),一旦I/O完成会通知进程,进程开始给客户端发回数据send(),这时也不是阻塞的,调用后就等内核发回通知发送的结果就行。整个下来把一个请求分成了很多个阶段,每个阶段都到很多模块去注册,然后处理,都是异步非阻塞。异步指的就是做一个事情,不需等返回结果,做好后会自动通知你。

    select/epoll的特点

    select 特点:select 选择句柄时,是遍历所有句柄,即句柄有事件响应时,select需遍历所有句柄才能获取到哪些句柄有事件通知,因此效率非常低。但是如果连接很少时,select 和 epoll 的LT触发模式相比, 性能上差别不大。
    这里多说一句,select支持的句柄数是有限制的, 同时只支持1024个,这个是句柄集合限制的,如超过这个限制,很可能导致溢出,且非常不容易发现问题, 当然可通过修改linux的socket内核调整这个参数。
    epoll特点:epoll对于句柄事件的选择不是遍历的,是事件响应的,就是句柄上事件来就马上选择出来,不需遍历整个句柄链表,因此效率非常高,内核将句柄用红黑树保存的。
    对于epoll而言还有ET和LT的区别,LT表水平触发,ET表边缘触发,两者在性能以及代码实现上差别也是非常大的。

    不管是Nginx还是Squid这种反向代理,其网络模式都是事件驱动。事件驱动其实是很老的技术,早期的select、poll都是如此。后来基于内核通知的更高级事件机制出现,如libevent里的epoll,使事件驱动性能得以提高。事件驱动的本质还是IO事件,应用程序在多个IO句柄间快速切换,实现所谓的异步IO。事件驱动服务器,最适合做的就是这种IO密集型工作,如反向代理,它在客户端与WEB服务器之间起一个数据中转作用,纯粹是IO操作,自身并不涉及到复杂计算。反向代理用事件驱动来做,显然更好,一个工作进程就可run了,没有进程、线程管理的开销,CPU、内存消耗都小。

    所以Nginx、Squid都是这样做的。当然,Nginx也可是多进程 + 事件驱动的模式,几个进程跑libevent,不需要Apache那样动辄数百的进程数。Nginx处理静态文件效果也很好,那是因为静态文件本身也是磁盘IO操作,处理过程一样。至于说多少万的并发连接,这个毫无意义。随手写个网络程序都能处理几万的并发,但如果大部分客户端阻塞在那里,就没什么价值。

    再看看Apache或者Resin这类应用服务器,之所以称他们为应用服务器,是因为他们真的要跑具体的业务应用,如科学计算、图形图像、数据库读写等。它们很可能是CPU密集型的服务,事件驱动并不合适。例如一个计算耗时2秒,那么这2秒就是完全阻塞的,什么event都没用。想想MySQL如果改成事件驱动会怎么样,一个大型的join或sort就会阻塞住所有客户端。这个时候多进程或线程就体现出优势,每个进程各干各的事,互不阻塞和干扰。当然,现代CPU越来越快,单个计算阻塞的时间可能很小,但只要有阻塞,事件编程就毫无优势。所以进程、线程这类技术,并不会消失,而是与事件机制相辅相成,长期存在。

    总言之,事件驱动适合于IO密集型服务,多进程或线程适合于CPU密集型服务,它们各有各的优势,并不存在谁取代谁的倾向。

    相关参考

    nginx-日志高级技巧](https://segmentfault.com/a/1190000000703319)
    nginx-官方文档
    nginx优化
    查看网站排名
    nginx-status-demo

    展开全文
  • centOS7安装nginxnginx配置

    万次阅读 多人点赞 2019-05-09 14:59:19
    强制保存并退出 6、启动nginx服务 切换目录到/usr/local/nginx/sbin下面 启动nginx命令: ./nginx 7、查看nginx服务是否启动成功 ps -ef | grep nginx 8、访问你的服务器IP 显示 说明安装和配置都没问题OK了 nginx....

    安装所需插件

    1、安装gcc

    gcc是linux下的编译器在此不多做解释,感兴趣的小伙伴可以去查一下相关资料,它可以编译 C,C++,Ada,Object C和Java等语言

    命令:查看gcc版本 

    gcc -v

     

    一般阿里云的centOS7里面是都有的,没有安装的话会提示命令找不到,

    安装命令:

    yum -y install gcc

     

    2、pcre、pcre-devel安装

    pcre是一个perl库,包括perl兼容的正则表达式库,nginx的http模块使用pcre来解析正则表达式,所以需要安装pcre库。

    安装命令:

    yum install -y pcre pcre-devel

     

    3、zlib安装

    zlib库提供了很多种压缩和解压缩方式nginx使用zlib对http包的内容进行gzip,所以需要安装

    安装命令:

    yum install -y zlib zlib-devel

     

    4、安装openssl

    openssl是web安全通信的基石,没有openssl,可以说我们的信息都是在裸奔。。。。。。

    安装命令:

    yum install -y openssl openssl-devel

     

    安装nginx

    1、下载nginx安装包

    wget http://nginx.org/download/nginx-1.9.9.tar.gz  

     

    2、把压缩包解压到usr/local/java

    tar -zxvf  nginx-1.9.9.tar.gz

     

    3、切换到cd /usr/local/java/nginx-1.9.9/下面

    执行三个命令:

    ./configure
    
    make
    
    make install

     

    4、切换到/usr/local/nginx安装目录

    5、配置nginx的配置文件nginx.conf文件,主要也就是端口

    可以按照自己服务器的端口使用情况来进行配置

    ESC键,wq!强制保存并退出

    6、启动nginx服务

    切换目录到/usr/local/nginx/sbin下面

    启动nginx命令:

    ./nginx

     

    7、查看nginx服务是否启动成功

    ps -ef | grep nginx

     

    8、访问你的服务器IP

    显示

    说明安装和配置都没问题OK了

    nginx.conf说明

    #user  nobody;
    worker_processes  1; #工作进程:数目。根据硬件调整,通常等于cpu数量或者2倍cpu数量。
     
    #错误日志存放路径
    #error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;
     
    #pid        logs/nginx.pid; # nginx进程pid存放路径
     
     
    events {
        worker_connections  1024; # 工作进程的最大连接数量
    }
     
     
    http {
        include       mime.types; #指定mime类型,由mime.type来定义
        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指令设置日志格式后,需要用access_log来指定日志文件存放路径
    					
        sendfile        on; #指定nginx是否调用sendfile函数来输出文件,对于普通应用,必须设置on。
    			如果用来进行下载等应用磁盘io重负载应用,可设着off,以平衡磁盘与网络io处理速度,降低系统uptime。
        #tcp_nopush     on; #此选项允许或禁止使用socket的TCP_CORK的选项,此选项仅在sendfile的时候使用
     
        #keepalive_timeout  0;  #keepalive超时时间
        keepalive_timeout  65;
     
        #gzip  on; #开启gzip压缩服务
     
        #虚拟主机
        server {
            listen       80;  #配置监听端口号
            server_name  localhost; #配置访问域名,域名可以有多个,用空格隔开
     
            #charset koi8-r; #字符集设置
     
            #access_log  logs/host.access.log  main;
     
            location / {
                root   html;
                index  index.html index.htm;
            }
            #错误跳转页
            #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$ { #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
            #    root           html; #根目录
            #    fastcgi_pass   127.0.0.1:9000; #请求转向定义的服务器列表
            #    fastcgi_index  index.php; # 如果请求的Fastcgi_index URI是以 / 结束的, 该指令设置的文件会被附加到URI的后面并保存在变量$fastcig_script_name中
            #    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; # ssl_prefer_server_ciphers  on; #
     
     
        #    location / {
        #        root   html;
        #        index  index.html index.htm;
        #    }
        #}
     
    }
    

     

     

    展开全文
  • nginx反向代理

    万次阅读 多人点赞 2018-10-19 17:39:37
    Nginx配置详解 nginx概述 nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;nginx可以作为一个HTTP服务器进行网站的发布处理,另外nginx可以作为反向...
  • LINUX安装nginx详细步骤

    万次阅读 多人点赞 2018-08-21 16:26:17
    1.安装依赖包 //一键安装上面四个依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel ...mkdir nginx cd nginx //下载tar包 wget http://nginx.org/download/nginx-1.13...
  • nginx安装及部署

    万次阅读 多人点赞 2019-04-11 15:52:47
    下载 官方网站:https://nginx.org/en/download.html Windows下安装 ...下载后解压(切记不能含有中文...1) 直接双击该目录下的"nginx.exe",即可启动nginx服务器; 2) 命令行进入该文件夹,执行start ngin...
  • nginx配置访问本地静态资源

    万次阅读 多人点赞 2019-04-11 18:07:39
    nginx作为一款高性能的服务器,用途很多,除了可以做后端服务器的代理,负载均衡之外你,还有一个用途就是做静态资源的缓存服务器,比如在前后端分离的项目中,为了加速前端页面的响应速度,我们可以将前端的相关...
  • nginx反向代理配置去除前缀

    万次阅读 多人点赞 2019-01-07 00:13:28
    使用nginx做反向代理的时候,可以简单的直接把请求原封不动的转发给下一个服务。设置proxy_pass请求只会替换域名,如果要根据不同的url后缀来访问不同的服务,则需要通过如下方法: 方法一:加"/" server ...
  • 动静分离二、Nginx 的安装三、 Nginx 的常用命令和配置文件四、 Nginx 配置实例 1 反向代理五、 Nginx 配置实例 2 负载均衡六、 Nginx 配置实例 3 动静分离七、 Nginx 的高可用集群 前言 一、nginx简介...
  • Nginx 原理和架构

    万次阅读 多人点赞 2019-11-09 17:13:09
    Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动...
  • nginx安装使用教程详解,实战

    万次阅读 2020-12-09 14:52:48
    新建本地挂载用目录,conf.d和logs目录,位置自己记住就好,如/app/nginx/conf.d和/app/nginx/logs 在conf.d下新建默认配置文件default.conf,并写入监听配置server { listen 80; server_name _; charset utf-8; ...
  • Linux下nginx的安装以及环境配置

    万次阅读 多人点赞 2018-10-09 13:54:39
    linux下nginx的安装以及环境配置 刚好最近在处理服务器相关的工作,所以记录一下nginx的安装,ok,接下来直接开始操作! 第一步:下载nginx压缩包 在这里可以去nginx官网下载->点我下载nginx 也可以直接使用...
  • 我们都知道nginx 默认使用80端口,有时候我们希望nginx运行在其他端口,就需要更改nginx配置 nginx配置文件在/etc/nginx目录下的nginx.conf。在nginx.conf->http选项末尾有引入两个目录下的文件分别为: ...
  • 一、Nginx基本概念 1.Nginx是什么 Nginx(engine X)是一个轻量级高性能的HTTP和反向代理web服务器。 占有内存少 并发能力强 2.反向代理 正向代理 在服务器端想要获取客户端信息时保护客户机 暴露的是代理服务器的...
  • Nginx 配置 HTTPS 完整过程

    万次阅读 多人点赞 2018-11-26 10:06:06
    1. nginx 的 ssl 模块安装 查看 nginx 是否安装 http_ssl_module 模块。...$ /usr/local/nginx/sbin/nginx -V ![在这里插入图片描述](https://img-blog.csdnimg.cn/2018112610054317.png) 如果出现 configure ...
  • nginx修改上传文件大小限制

    万次阅读 多人点赞 2018-03-29 09:28:16
    自己搭的服务器,用nginx做代理。上传超过1M大的客户端文件无法正常上传,nginx直接报错,上传文件太大,于是修改了下nginx的配置,就可以了。 按照网上所说的加上client_max_body_size 字段,怎么重启nginx都不行...
  • Nginx】什么是Nginx?为什么使用Nginx

    万次阅读 多人点赞 2017-06-12 20:17:13
    这个是我想问的,公司的新项目是要用Nginx+tomcat7+jdk开发的,用户命名可以直接访问tomcat,为啥还要用Nginx?这货是个啥玩意? 二、什么是Nginx? 在传统的Web项目中,并发量小,用户使用的少。所以在低并发的...
  • CentOS 7 yum 安装 Nginx

    万次阅读 多人点赞 2016-09-21 17:16:50
    1.添加Nginx到YUM源 添加CentOS 7 Nginx yum资源库,打开终端,使用以下命令: sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm 2.安装Nginx 在你的...
  • Nginx出现403 forbidden

    万次阅读 多人点赞 2018-08-10 12:23:43
    nginx访问时报403, 于是查看nginx日志,路径为/var/log/nginx/error.log。打开日志发现报错Permission denied,详细报错如下: 1. open() "/data/www/1.txt" failed (13: Permission denied), ...
  • Nginx的超时keeplive_timeout配置详解

    万次阅读 2018-07-19 22:27:22
    Nginx 处理的每个请求均有相应的超时设置。如果做好这些超时时间的限定,判定超时后资源被释放,用来处理其他的请求,以此提升 Nginx 的性能。 keepalive_timeout HTTP 是一种无状态协议,客户端向服务器发送一个 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 798,011
精华内容 319,204
关键字:

ngix