精华内容
下载资源
问答
  • nginx 速度

    2013-07-01 21:41:00
    一直用nginx 做为web服务器,但是发现最近打开网页很慢,试了一下,django 的runserver的速度很快,开始以为是不是在个人电脑上nginx的性能发挥不出来,后来发现这个网页上有很多链接是过去的,现在没有了,我把这些...

    一直用nginx 做为web服务器,但是发现最近打开网页很慢,试了一下,django 的runserver的速度很快,开始以为是不是在个人电脑上nginx的性能发挥不出来,后来发现这个网页上有很多链接是过去的,现在没有了,我把这些都去了之后发现速度一下子就上来了,看来是没有设置404的问题,

    django 可以设置404,nginx也可以设置,有时间再做吧!

    转载于:https://www.cnblogs.com/fengidri/p/3165923.html

    展开全文
  • Nginx 调优

    万次阅读 2021-07-28 08:27:30
    Nginx 调优

    • 隐藏 Nginx 版本号
    • 修改 nginx 运行用户-设置 nginx 的 cpu 亲和力
    • 设置 Nginx 每个进程最多可以打开的文件数和事件处理模型
    • ServerName 和 location 匹配及高效传输模式
    • Fastcgi 调优-gzip 压缩网页调优-expires 缓存调优
    • 日志切割优化-目录文件访问控制-来源访问控制
    • 禁止使用 IP 访问网站和 301 优化-防盗链-错误页面的提示-开启认证功能  

    • 隐藏 Nginx 版本号,需要一共修改 3 个源代码文件 nginx.h   ngx_http_header_filter_module.c   ngx_http_special_response.c
    •  tar xf nginx-1.21.1.tar.gz -C /opt/
       cd /opt/nginx-1.21.1/
    • vim src/core/nginx.h
    • 改:
      define NGINX_VERSION "1.21.1"
      define NGINX_VER "nginx/" NGINX_VERSION
      为:
      #define NGINX_VERSION "8.8.8.8" #此行修改的是你想要的版本号。
      #define NGINX_VER "GF/" NGINX_VERSION #此行修改的是你想修改的软件名称。

    •  修改 HTTP 头信息中的 connection 字段,防止回显具体版本号
    • vim src/http/ngx_http_header_filter_module.c
    • 改:static char ngx_http_server_string[] = "Server: nginx" CRLF;
    • 为:static u_char ngx_http_server_string[] = "Server: GF" CRLF;

    • 修改 ngx_http_special_response.c 文件定义了 Nginx 报 404 错误时,不回显版本号。 
    • vim src/http/ngx_http_special_response.c
    • 改 :static u_char ngx_http_error_tail[] =
      "<hr><center>nginx</center>" CRLF
      "</body>" CRLF
      "</html>
    • 为:static u_char ngx_http_error_tail[] =
      "<hr><center>GF</center>" CRLF
      "</body>" CRLF
      "</html>

    • 编译和安装 nginx,安装 nginx 依赖包
    • yum -y install gcc gcc-c++ autoconf automake zlib zlib-devel openssl openssl-devel pcre pcre-devel gd-devel
    • 创建一个 nginx 用户用于后期启动 nginx 进程使用,比直接使用 root 用户启动 nginx 更安全
      useradd -s /sbin/nologin -M nginx 

    • ./configure --prefix=/usr/local/nginx1.21.1 --user=nginx --group=nginx \

      --with-http_ssl_module --with-http_dav_module --with-http_stub_status_module \

      --with-http_addition_module --with-http_sub_module --with-http_flv_module \

      --with-http_mp4_module --with-http_realip_module --with-http_gzip_static_module \

      --with-pcre --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log \

      --http-log-path=/var/log/nginx/access.log --with-debug --with-http_image_filter_module

    • --with-http_dav_module #启用支持(增加 PUT,DELETE,MKCOL:创建集合,COPY 和MOVE 方法)。 默认关闭,需要编译开启
      --with-http_stub_status_module #启用支持(获取 Nginx 上次启动以来的工作状态)。
      --with-http_addition_module #启用支持(作为一个输出过滤器,支持不完全缓冲,分部分相应请求)。
      --with-http_sub_module #启用支持(允许一些其他文本替换 Nginx 相应中的一些文本)。
      --with-http_flv_module #启用支持(提供支持 flv 视频文件支持)。
      --with-http_mp4_module #启用支持(提供支持 mp4 视频文件支持,提供伪流媒体服务端支持)。
      --with-pcre #支持 正则表达式
    • 用#./configure --help 查看帮助。
    • make -j 4 && make install
    • 启动 nginx 服务
      /usr/local/nginx/sbin/nginx

    • nginx systemctl 启动脚本

    • # vim /lib/systemd/system/nginx.service
      [Unit]
      Description=nginx
      After=network.target
      [Service]
      Type=forking
      ExecStart=/usr/local/nginx1.21.1/sbin/nginx
      ExecReload=/usr/local/nginx1.21.1/sbin/nginx -s reload
      ExecStop=/usr/local/nginx1.21.1/sbin/nginx -s quit
      PrivateTmp=true
      [Install]
      WantedBy=multi-user.target
    • # systemctl daemon-reload
      # systemctl enable nginx.service --now
      # systemctl is-enabled nginx

      enabled

    •  测试 :查看在 http 协议中是否隐藏了版本和软件名

    • 测试 :当访问时,出现 404 及其它错误时也会返回已经隐藏的版本信息

    • 测试 :当访问时,出现 403 错误也会返回已经隐藏的版本信息

    • 修改 Nginx 运行用户
    • vim /etc/nginx/nginx.conf
    • 改为:user  nginx;
       
    • 不重启 nginx 服务加载配置文件
    • /usr/local/nginx1.21.1/sbin/nginx -s reload   

    • 这个是以 nginx 身份运行的 worker process 是 nginx 的工作进程,work 进程才为用户提供服务
    • 设置 Nginx 运行进程个数,一般设置为 CPU 核心数或者核心数的2倍,或者设置为 auto 自动识别

    • vim /etc/nginx/nginx.conf
      worker_processes  auto;

    • 查看 nginx 管理进程和 4 个 work 进程的父子关系

    • pstree -p |grep nginx

    • pstree 属于 psmisc 包
    • yum -y install psmisc
    •  设置 Nginx 运行 CPU 的亲和力
      CPU 的亲和力,就是把 nginx 每个进程绑定到固定的 cpu 上,从而减少 cpu 上下文切换导致的额外的开销。
      比如服务器是 4 核 4 线程的 cpu,配置如下:
      vim /etc/nginx/nginx.conf
      worker_processes auto;     #在此行下添加
      worker_cpu_affinity 0001 0010 0100 1000; 
    •  如果服务器是 8 核 8 线程的 cpu,应该配置为如下:
    • worker_processes 8;
    • worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
    • 查看

      # /usr/local/nginx1.21.1/sbin/nginx -s reload
      # pstree -p |grep nginx
                 |-nginx(86539)-+-nginx(103390)
                 |              |-nginx(103391)
                 |              |-nginx(103393)
                 |              `-nginx(103395)
      # taskset -cp 103390 

    • list: 0      #表示 nginx PID 103390,只能在第一个 cpu 运行,以此类推

    • 设置 Nginx 每个进程最多可以打开的文件数和事件处理模型

    • Nginx 最多可以打开文件数
    • worker_rlimit_nofile 655350; 
      这个指令是指当一个 Nginx 进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与 nginx 进程数相除,即:(ulimit -n)/ worker_processes ,但是 nginx 分配请求并不是那么均匀,所以最好与 ulimit -n 的值保持一致。
    • 修改 ulimit -n 的值
    • ulimit -n 655350

    •  Nginx 事件处理模型
      # vim /usr/local/nginx/conf/nginx.conf
      events {
      use epoll; #添加这一行,使用 epoll 模式
      worker_connections 655350;

    • Nginx 事件处理模型对比

    select,poll,epoll 都是 nginx 下的 IO 多路复用的机制。I/O 多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。
    Epoll 在 Linux2.6 内核中正式引入,和 select 和 poll 相似,其实都是 I/O 多路复用技术。

    • epoll 优势:

    Epoll 没有最大并发连接的限制,上限是最大可以打开文件的数目,这个数字一般远大于 2048, 一般来说这个数目和系统内存关系很大,具体数目可以 cat /proc/sys/fs/file-max 察看。
    # cat /proc/sys/fs/file-max
    808855
    效率提升,Epoll 最大的优点就在于它只管你“活跃”的连接,而跟连接总数无关,因此在实际的网络环境中,Epoll 的效率就会远远高于 select 和 poll。
    Epoll 在这点上使用了“共享内存”,更省内存,效率更高。

    • 单个进程允许客户端最大并发连接数 
      # 1  html  vim /etc/nginx/nginx.conf
      改:worker_connections 1024; 
      为:worker_connections 655350; 
    •  worker_connections:这个属性是指单个工作进程可以允许同时建立外部连接的数量。无论这个连接是外部主动建立的,还是内部建立的。一个工作进程建立一个连接后,进程将打开一个文件副本。所以这个数量还受限于,操作系统 ulimit -n 设定的值和 nginx 的 worker_connections 的值。一般情况下系统 ulimit -n、worker_rlimit_nofile 、worker_connections 三者的值设定一致。 
    • nginx 服务器实际最大并发值就是:worker_processes*worker_connections 的乘积。
    • # top -u nginx               #Nginx 每个进程使用的内存大小。
    •    PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                                  
      104020 nginx     20   0  348828 275636   3148 S   0.0  3.4   0:00.37 nginx                                                                                                                    
      104021 nginx     20   0  348828 275632   3144 S   0.0  3.4   0:00.35 nginx                                                                                                                    
      104024 nginx     20   0  348828 275636   3148 S   0.0  3.4   0:00.36 nginx                                                                                                                    
      104025 nginx     20   0  348828 275632   3144 S   0.0  3.4   0:00.36 nginx 
    • 注:通过查看 RES 列,可以看到刚启动的 nginx 进程占用内存大概 275M 左右。

    • ServerName 和 location 匹配及高效传输模式 

    • ServerName 匹配
    • ServerName 匹配方式
      (1)、精确匹配:www.aa.com
      (2)、左侧通配符匹配:*.aa.com
      (3)、右侧通配符匹配:www.*
      (4)、正则表达式:~ ^.*\.aa\.com$
      (5)、default_server
      (5)、服务 IP 地址
    • 修改 server_name 值为实际的域名
      # vim /etc/nginx/nginx.conf
      改:server_name localhost;
      为:server_name  gf-beyond.com; 
      注:nginx 配置文件中,每个参数都是以分号;结束
    • -t #检测 nginx 配置文件是否正确

    • location 匹配如下:
      = 绝对匹配。
      ^~ URL 前半部分匹配,不检查正则。~ 正则匹配,区分大小写。
      ~* 正则匹配,不区分大小写。
      \ 转义。
      * 配置任意个任意字符。
      $ 以什么结尾。
      例:匹配出以.php 结尾的文件且配置时不区分大小写。 
    • location ~ \.php$ {..}  #~ \.php$ 表示 url 中以.php 结尾的文件且区分大小写,都按{...}中的方法进行处理 。 这个就可以完成我们的需求。
    • 例:匹配出以.txt 结尾的文件且配置时不区分大小写
       location ~* \.txt$ {
      root file;
      }
    • 开启高效传输模式

    • 在 http 模块内配置
    • http {
      Include mime.types;                                #媒体类型。
      default_type application/octet-stream;    #默认媒体类型 足够。
      sendfile on;           #开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘 IO 重负载应用,可设置为 off,以平衡磁盘与网络 I/O 处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成 off。
      tcp_nopush on;必须在 sendfile 开启模式才有效,防止网络阻塞,积极的减少网络报文段的数量。
    • 连接超时时间
      主要目的是保护服务器资源,CPU,内存,控制连接数,因为建立连接也是需要消耗资源的,TCP 的三次握手四次挥手等,我们一般断掉的是那些建立连接但是不做事儿,也就是我建立了链接开始,但是后续的握手过程没有进行,那么我们的链接处于等待状态的,全部断掉!
      同时我们也希望 php 建议短链接,消耗资源少。
    • keepalive_timeout 65;       #在此行下加入如下
      tcp_nodelay on;
      client_header_timeout 15;
      client_body_timeout 15;
      send_timeout 15;
    • keepalived_timeout 客户端连接保持会话超时时间,超过这个时间,服务器断开这个链接。
      tcp_nodelay;也是防止网络阻塞,不过要包涵在 keepalived 参数才有效。client_header_timeout 客户端请求头读取超时时间,如果超过设个时间没有发送任何数据,nginx将返回 request time out 的错误。
      client_body_timeout 客户端求主体超时时间,超过这个时间没有发送任何数据,和上面一样的错误提示。
      send_timeout 响应客户端超时时间,这个超时时间仅限于两个活动之间的时间,如果超过这个时间,客户端没有任何活动,nginx 关闭连接。
    • 文件上传大小限制  , PHP 可以修改上传文件大小限制,nginx 也可以修改。
    • client_max_body_size 10m;
    • Fastcgi 调优-gzip 压缩网页调优-expires 缓存调优
    • 使用 gzip 压缩功能,可能为我们节约带宽,加快传输速度,有更好的体验,节约成本,所以说这是一个重点。
      Nginx 启用压缩功能需要 ngx_http_gzip_module 模块,apache 使用的是 mod_deflate
      一般需要压缩的内容有:文本,js,html,css,对于图片,视频,flash 什么的不压缩,同时也要注意,使用 gzip 的功能需要消耗 CPU 
    •     gzip on;
          gzip_min_length 1k;
          gzip_buffers 4 16k;
          gzip_http_version 1.1;
          gzip_comp_level 9;
          gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml font/ttf font/otf
          gzip_vary on;
          gzip_proxied expired no-cache no-store private auth;
          gzip_disable "MSIE [1-6]\.";
    • gzip on; #开启压缩功能。
      gzip_min_length 1k; #设置允许压缩的页面最小字节数,页面字节数从 header 头的Content-Length(内容长度)中获取,默认值是 0,不管页面多大都进行压缩,建议设置成大于 1K,如果小与 1K 可能会越压越大。
      gzip_buffers 4 32k; #压缩缓冲区大小,表示申请 4 个单位为 32K 的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储 gzip 压缩结果。
      gzip_http_version 1.1; #压缩版本(默认 1.1,前端为 squid2.5 时使用 1.0)用于设置识别 HTTP协议版本,默认是 1.1,目前大部分浏览器已经支持 GZIP 解压,使用默认即可。
      gzip_comp_level 9; #压缩比例,用来指定 GZIP 压缩比,1 压缩比最小,处理速度最快,9 压缩比最大,传输速度快,但是处理慢,也比较消耗 CPU 资源。
      gzip_types text/css text/xml application/javascript; #用来指定压缩的类型,‘text/html’类型总是会被压缩。
      gzip_vary on; #vary header 支持,该选项可以让前端的缓存服务器缓存经过 GZIP 压缩的页面,
      例如用 Squid 缓存经过 nginx 压缩的数据。
    • Fastcgi 相关概念
      FastCGI 是一种协议,规定了 FastCGI 应用和支持 FastCGI 的 Web 服务器之间的接口。Fastcgi 是静态服务和动态服务的一个接口 FastCGI 是二进制连续传递的。
      Fastcgi 相关的个概念如下:
      Cache:写入缓存区
      Buffer:读取缓存区
      Fastcgi 是静态服务和动态服务的一个接口
    •     fastcgi_send_timeout 300;
          fastcgi_read_timeout 300;
          fastcgi_buffers 4 64k;
          fastcgi_busy_buffers_size 128k;
          fastcgi_temp_path /var/run/nginx-tmp-cache;
          fastcgi_temp_file_write_size 128k;
          fastcgi_cache_path /var/run/nginx-cache levels=1:2
          keys_zone=ngx_fcgi_cache:512m inactive=1d max_size=40g;
    • }
    • 在 server 标签添加如下:
    • server {
    • .......
    •         location ~ .*\.(php|php5)?$ {
               root           /usr/local/nginx1.21.1/html;
               fastcgi_pass 127.0.0.1:9000;
               fastcgi_index index.php;
               fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
               include        fastcgi_params;
               include        fastcgi.conf;
               fastcgi_cache ngx_fcgi_cache;
               fastcgi_cache_valid 200 302 1h;
               fastcgi_cache_valid 301 1d;
               fastcgi_cache_valid any 1m;
               fastcgi_cache_min_uses 1;
               fastcgi_cache_use_stale error timeout invalid_header http_500;
               fastcgi_cache_key http://$host$request_uri;
              }
      .......
      }
    • fastcgi cache 资料 官方文档:

    http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_cache

    配置详解:
    HTTP 字段:
    fastcgi_connect_timeout 300; #指定链接到后端 FastCGI 的超时时间。
    fastcgi_send_timeout 300; # Nginx 允许 FastCGI 服务器返回数据的超时时间,即在规定时间内后端服务器必须传完所有的数据,否则 Nginx 将断开这个连接。
    fastcgi_read_timeout 300; # Nginx 从 FastCGI 服务器读取响应信息的超时时间,表示连接建立成功后,Nginx 等待后端服务器的响应时间。
    fastcgi_buffers 4 64k; #指定缓冲区的数量和大小,如果一个 PHP 脚本返回的页面大小为 256K,则分配为 4 个 64K 的缓冲区来缓存,大于缓冲区大小的应答结果将被写入 temp_file 临时文件中。推荐该值为你的站点 php 脚本返回的页面大小的平均进行设置,尽量不需要使缓存文件写入磁
    盘,也不要设置太大导致内存资源浪费。
    fastcgi_temp_path /var/run/nginx-tmp-cache; #指定临时目录
    fastcgi_cache_path /var/run/nginx-cache levels=1:2 keys_zone=ngx_fcgi_cache:512m 
    inactive=1d max_size=40g; #定义缓存的路径、大小、缓存时间。
    上条命令详解:(参数过长拆分详解)
    fastcgi_cache_path 创建缓存路径,如果指定其他路径需注意上层目录是否创建。
    levels:指定了该缓存空间有两层 hash 目录,设置缓存目录层数,levels=1:2,表示创建两层目录缓存,最多创建三层。第一层目录名取 fastcgi_cache_key md5 的最后一个字符,第二层目录名取倒数2-3 字符,如:fastcgi_cache_key md5 为 b7f54b2df7773722d382f4809d65029c,则:
    注:levels 虽然可以设置 3 层但是数值请勿大于 2.如果设置 1:2:3 则报错。1:2:2 则正常。
    levels=2:2 为/var/run/nginx-cache/9c/02/b7f54b2df7773722d382f4809d65029c
    levels=1:2 为/var/run/nginx-cache/c/29/b7f54b2df7773722d382f4809d65029c
    keys_zone 为这个缓存区起名为 zone_name
    512m 指缓存空间最一开始为 512MB;
    inactive=1d 代表如果缓存文件一天内没有被访问,则删除;
    max_size=40g 代表缓存最大为 40G,建议根据自己的磁盘剩余空间来写大小,不能超过剩余缓存的 80%;

    Server 字段中配置详解:
    include fastcgi.conf; #引用 fastcgi 默认配置文件
    fastcgi_cache ngx_fcgi_cache; #指定缓存名称,由 http 字段中 fastcgi_cache_path
    创建。
    fastcgi_cache_valid 200 302 1h; #设置 200、302 状态的 URL 缓存 1 小时
    fastcgi_cache_valid 301 1d; #设置 301 状态的 URL 缓存 1 天。
    fastcgi_cache_valid any 1m; #将其他应答缓存为 1 分钟。
    fastcgi_cache_min_uses 1; #设置请求 1 次就会被缓存。
    fastcgi_cache_use_stale error timeout invalid_header http_500; #设置 500 状态码
    不进行缓存。500 状态码意思是:内部服务器错误
    fastcgi_cache_key http://$host$request_uri; #该指令用来设置 Web 缓存的 Key 值,Nginx
    根据 Key 值 MD5 缓存。一般根据 host(域名),request_uri(请求的路径)等变量组合成
    fastcgi_cache_key。MD5 值将作为缓存文件名。

    • expires 缓存调优
      缓存,主要针对于图片,css,js 等元素更改机会比较少的情况下使用,特别是图片,占用带宽大,完全可以设置图片在浏览器本地缓存 365d,css,js,html 可以缓存个 10 来天,这样用户第一次打开加载慢一点,第二次,就非常快了!缓存的时候,我们需要将需要缓存的拓展名列出来!
    • Expires 缓存配置在 server 字段里面:
    •         location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
                      expires 365d;
              }
              
              location ~ .*\.(js|css)?$ {
                      expires 30d;
              }

              location ~ ^/(images|javascript|js|css|flash|media|static)/ {
                      expires 360d;
              }

              location ~(robots.txt) {
                      expires 7d;
                      break;
              }

    • }

    • expire 功能缺点:
      被缓存的页面或数据更新了,用户看到的可能还是旧的内容,反而影响用户体验。
      解决办法:
      第一个 缩短缓存时间,例如:1 天,不彻底,除非更新频率大于 1 天。
      第二个 对缓存的对象改名。
      a.图片,附件一般不会被用户修改,如果用户修改了,实际上也是更改文件名重新传了而已。
      b.网站升级对于 js,css 元素,一般可以改名,把 css,js,推送到 CDN。
      网站不希望被缓存的内容:
      1)广告图片
      2)网站流量统计工具
      3)更新频繁的文件(google 的 logo)
    • 查看缓存目录

    • 将缓存文件挂载至内存
    • # vim /etc/fstab #添加一行
      tmpfs /var/run/nginx-cache tmpfs defaults,size=512M 0 0
      mount -a
      df -Th

    • 注:fastcgi_cache 缓存是先写在 fastcgi_temp_path 再移到 fastcgi_cache_path,所以如果不选择将缓存目录挂载至内存,建议 tmp_path 和 cache_path 在同一分区中,同分区文件复制不会占用过高的 IO 资源。
    •  浏览器 F12 查看缓存情况 

    • ​​​日志切割优化-目录文件访问控制-来源访问控制

    • 日志优化的目的,是为了一天日志一压缩,按天存放,超过 10 天的删除。


    • # vim /usr/local/nginx1.21.1/logs/cut_nginx_log.sh         #每天日志分割脚本。

    • #!/bin/bash
      date=$(date +%F -d -1day)
      cd /var/log/nginx/
      if [ ! -d cut ] ; then mkdir cut
      fi
      mv access.log cut/access_$(date +%F -d -1day).log
      mv error.log cut/error_$(date +%F -d -1day).log
      /usr/local/nginx1.21.1/sbin/nginx -s reload
      tar -JcPf cut/$date.tar.xz cut/*
      mv cut/$date.tar.xz /var/log/nginx/
      rm -f cut/access* && rm -f cut/error*
      if [[ -z `egrep -v "00 00 * * * /bin/bash /usr/local/nginx1.21.1/logs/cut_nginx_log.sh &> /dev/null" /var/spool/cron/root` ]]; then
      echo "00 00 * * * /bin/bash /usr/local/nginx1.21.1/logs/cut_nginx_log.sh &> /dev/null" >> /var/spool/cron/root
      fi
      find /var/log/nginx/cut/ -type f -mtime +10 | xargs rm -rf

    • chmod +x cut_nginx_log.sh

    • ./cut_nginx_log.sh

    • 健康检查的日志,不用输入到 log 中,因为这些日志没有意义,我们分析的话只需要分析访问日志,看看一些页面链接,如 200,301,404 的状态码,在 SEO 中很重要,而且我们统计 PV 是页面计算,这些都没有意义,反而消耗了磁盘 IO,降低了服务器性能,可以屏蔽这些如图片,js,css 这些不宜变化的内容。
      # vim /etc/nginx/nginx.conf
    • server {
    • ......
             location ~ .*\.(js|jpg|jpeg|JPG|JPEG|css|bmp|gif|GIF)$ {
                      access_log off;
              }
    • ........
    •  }
    • 测试读取日志文件 

    • 日志目录权限优化:只允许root用户有更改权限
    • chown -R root. /var/log/nginx/
    • 日志格式优化

    • 注意不能写在 server 字段 否则会报一个类似:nginx: [emerg] “log_format” directive is not allowed here in的错误
    • log_format access '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $http_x_forwarded_for ' '"$upstream_addr" "$upstream_status" "$upstream_response_time" "$request_time"';
      其中,各个字段的含义如下:
       1. $remote_addr 与$http_x_forwarded_for 用以记录客户端的 ip 地址;
       2. $remote_user :用来记录客户端用户名称;
       3. $time_local : 用来记录访问时间与时区;
       4. request : 用来记录请求的 url 与 http 协议;
       5. status : 用来记录请求状态,功是 200;
       6. body_bytes_s ent :记录发送给客户端文件主体内容大小;
       7. http_referer :用来记录从哪个页面链接访问过来的;
       8. http_user_agent :记录客户端浏览器的相关信息;

    • 目录文件访问控制
      主要用在禁止目录下指定文件被访问,当然也可以禁止所有文件被访问!一般什么情况下用?比如是有存储共享,这些文件本来都只是一些下载资源文件,那么这些资源文件就不允许被执行,如 sh,py,pl,php等等。
      例如:禁止访问 images 下面的 php 程序文件 
    • 在 server 字段添加
    • server {
    • ......
    •         location ~ ^/images/(jpg|png)/.*\.(php|php5|.sh|.py|.py)$ {
                       deny all;
              }
    • }
    • echo "<?php phpinfo(); ?>" > /usr/local/nginx1.21.1/html/images/test.php
    • chown root. /usr/local/nginx1.21.1/html/images/test.php
    • chmod 600 /usr/local/nginx1.21.1/html/images/test.php

    •  其他文件访问正常

    •  images 下的其他目录下的 PHP 文件

    •  配置 nginx 禁止访问*.txt 文件
    • server {
    • .................
    •         location ~* \.(txt|doc)$ {
                      if ( -f $request_filename) {
                      root /usr/local/nginx1.21.1/html;
                      break;
                      }
                      deny all;
              }
    • ....................
    • }

    •  其他目录

    •  也可以重定向到某一个 URL
    • server {
    • ..........
      location ~* \.(txt|doc)$ {

                    if ( -f $request_filename) {
                    root /usr/local/nginx1.21.1/html;
                    rewrite ^/(.*)$ http://www.gf-beyond.com last;
                    break;
                    }
                    #deny all;
            }
    ......
    }


     

    •  对目录进行限制的方法
    • server {
      ........

              location ~ ^/(upload)/ {
                      deny all;
              }

              location ~ ^/(test)/ {
                      deny all;
              }

      ........
      }

    • 来源访问控制
      需要 ngx_http_access_module 模块支持
    • server {
      .......
              location / {
                  root   /usr/local/nginx1.21.1/html;
                  index  index.html index.htm;
                      allow 192.168.1.0/24;
                      deny all;
              }
      .........
      }
    •  这里为了测试改成 1.0 网段,本地使用 2.0 网段

    •  禁止使用 IP 访问网站和 301 优化-防盗链-错误页面的提示开启认证功能

    • 有时候,访问网站的时候,使用 IP 也可以,把这一层给屏蔽掉,让其直接反馈给 403,也可以做跳转。
    • 禁止 IP 直接访问,跳转到首页
    • server {
      ...............

              listen       80;
              server_name  www.gf-beyond.com gf-beyond.com;

              if ( $host = '192.168.2.40' ) {
                       rewrite ^/(.*)$ http://www.gf-beyond.com/$1 permanent;
              }

      ......................

      }

    • 查看日志 304 跳转

    •  域名跳转的做法:
    •     server {
              listen       80;
              server_name  gf-beyond.com;

              rewrite ^ http://www.baidu.com$request_uri?;
      ........
      }

    •  访问 http://www.gf-beyond.com 会直接跳转到  baidu.com
    • 403 反馈的做法
      server {
       listen 80 default_server;
       server_name _;
       return 403;
      ........
      }

    • 访问 gf-beyond.com 会跳转到  http://www.gf-beyond.com

    •  防盗链

    • 防止别人直接从你网站引用图片等链接,消耗了你的资源和网络流量,那么我们的解决办法由几种:
      1:水印,品牌宣传,你的带宽,服务器足够
      2:防火墙,直接控制,前提是你知道 IP 来源
      3:防盗链策略
      下面的方法是直接给予 404 的错误提示:
    • server {
      .......
              location ~* \.(jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar)$ {
                      valid_referers none blocked *.gf-beyond.com gf-beyond.com;
                      if ($invalid_referer) {
                      return 404;
                      }
              }
      ........
      }

    •  在图片上右键 --- 在新标签页打开图片

    • 同时,我们也可以设置一个独有的,图片比较小的,来做 rewrite 跳转
      server {
      .........
      location ~* \.(jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar)$ {
       valid_referers none blocked *.beyond.com beyond.com;
       if ($invalid_referer) {
       rewrite ^/ http://www.gf-beyond.com/images/nolink.png;
       }
      }
      ....
      }

    • 错误页面的提示

    • 对于自定义的错误页面,我们只需要将 errorpage 写入到配置文件。
    • server {
      ........
      error_page 404 /404.html;
      ...............
      }

    •  开启认证功能
    • server {
      .............
      location ~ /test/ {
       auth_basic "gf";
       auth_basic_user_file /usr/local/nginx1.21.1/passwd;
       }
      ........................
    • htpasswd -cb /usr/local/nginx1.21.1/passwd gf 123456
      chmod 400 /usr/local/nginx1.21.1/passwd 
      chown nginx. /usr/local/nginx1.21.1/passwd
      nginx -s reload

     

    • 防止 DDOS 攻击
      通过使用 limit_conn_zone 进行控制单个 IP 或者域名的访问次数。
    • vim /etc/nginx/nginx.conf
    • http {
      .......
      limit_conn_zone $binary_remote_addr zone=addr:10m;
      ........

      server {
      ...................
      location / {
                  root   /usr/local/nginx1.21.1/html;
                  index  index.html index.htm;
                      allow 192.168.2.0/24;
                      deny all;
                      limit_conn addr 1;
              }
      ...................
      }
    • 测试
    • 在另外一台机器上 
    • ab -n 2 -c 2 -t 1 http://192.168.2.40/test/11.html
    • 测试  -n 发出 2个 在 -t 1秒内并发 -c 2个请求

    • 查看 192.168.2.40 的访问日志

    • 加大测试次数
    • ab -n 200 -c 200 -t 1 http://192.168.2.40/1.html

    •  查看日志

    •  server {
      .......
             location / {
                  root   /usr/local/nginx1.21.1/html;
                  index  index.html index.htm;
                      allow 192.168.2.0/24;
                      deny all;
                      limit_conn addr 1;
                      set $no_cache 0;
                              if ($request_method = POST) {
                                      set $no_cache 1;
                              }
                              if ($query_string != "") {
                                      set $no_cache 1;
                              }
                              if ($request_uri ~* "(/zb_system/)") {
                                      set $no_cache 1;
                              }
                              fastcgi_cache_bypass $no_cache;
                              fastcgi_no_cache $no_cache;

              }
      .........

      }
    • 再次测试


    • 完整 配置文件内容

    • grep -Ev "^$|^#|^[[:space:]].*#.*$" /etc/nginx/nginx.conf
      user  nginx;
      worker_processes  auto;
      worker_cpu_affinity 0001 0010 0100 1000;
      worker_rlimit_nofile 655350;
      events {
          use epoll;
          worker_connections  655350;
      }
      http {
          include       mime.types;
          default_type  application/octet-stream;
          sendfile       on;
          tcp_nopush     on;
          keepalive_timeout  65;
          tcp_nodelay on;
          client_header_timeout 15;
          client_body_timeout 15;
          send_timeout 15;
          client_max_body_size 10m;
          gzip on;
          gzip_min_length 1k;
          gzip_buffers 4 16k;
          gzip_http_version 1.1;
          gzip_comp_level 9;
          gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml font/ttf font/otf application/x-httpd-php image/jpeg image/gif image/png; 
          gzip_vary on;
          gzip_proxied expired no-cache no-store private auth;
          gzip_disable "MSIE [1-6]\.";
          fastcgi_send_timeout 300;
          fastcgi_read_timeout 300;
          fastcgi_buffers 4 64k;
          fastcgi_busy_buffers_size 128k;
          fastcgi_temp_path /var/run/nginx-tmp-cache;
          fastcgi_temp_file_write_size 128k;
          fastcgi_cache_path /var/run/nginx-cache levels=1:2 
          keys_zone=ngx_fcgi_cache:512m inactive=1d max_size=40g;
          log_format access '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $http_x_forwarded_for ' '"$upstream_addr" "$upstream_status" "$upstream_response_time" "$request_time"';
          limit_conn_zone $binary_remote_addr zone=addr:10m;
          server {
              listen       80;
              server_name  www.gf-beyond.com gf-beyond.com;
              charset utf-8;
           if ( $host = 'gf-beyond.com' ) {
               rewrite ^/(.*)$ http://www.gf-beyond.com/$1 permanent;
           }
           if ( $host = '192.168.2.40' ) {
               rewrite ^/(.*)$ http://www.gf-beyond.com/$1 permanent;
           }
          location ~* .*\.(js|css|jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar|mp4|rm|rmvb|mkv|gz)$ {
              expires 360d;
              valid_referers none blocked *.gf-beyond.com gf-beyond.com;
                          if ($invalid_referer) {
                              rewrite ^/ http://www.gf-beyond.com/images/nolink.png;
                          }
           }
          location ~* ^/(images|fonts|javascript|css|js|flash|media|static|assets)/ {
              expires 360d;
           }
          location ~(robots.txt) {
              expires 7d;
               break;
           }
          location ~ .*\.(js|jpg|jpeg|JPG|JPEG|css|bmp|gif|GIF)$ {
              access_log off;
          }
              location / {
                  root   /usr/local/nginx1.21.1/html;
                  index  index.html index.htm;
              allow 192.168.2.0/24;
              deny all;
              limit_conn addr 1;
              set $no_cache 0;
                   if ($request_method = POST) {
                       set $no_cache 1;
                   }
                  if ($query_string != "") {
                      set $no_cache 1;
                  }
                  if ($request_uri ~* "(/)") {
                      set $no_cache 1;
                  }
                  fastcgi_cache_bypass $no_cache;
                  fastcgi_no_cache $no_cache;
              }
           location ~* ^/images/(jpg|png)/.*\.(php|php5|.sh|.py|.pl)$ {
               deny all;
               }    
          location ~* \.(txt|doc)$ {
              if ( -f $request_filename) {
              root /usr/local/nginx1.21.1/html;
              rewrite ^/(.*)$ http://www.gf-beyond.com last;
               break;
               }
              }
              error_page  404              /404.html;
              error_page   500 502 503 504  /50x.html;
              location = /50x.html {
                  root   html;
              }
          location ~ .*\.(php|php5)?$ {
           root        /usr/local/nginx1.21.1/html;
            fastcgi_pass 127.0.0.1:9000;
           fastcgi_index index.php;
               fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
               include        fastcgi_params;
           include     fastcgi.conf;
           fastcgi_cache ngx_fcgi_cache;
           fastcgi_cache_valid 200 302 1h;
           fastcgi_cache_valid 301 1d;
           fastcgi_cache_valid any 1m;
           fastcgi_cache_min_uses 1;
           fastcgi_cache_use_stale error timeout invalid_header http_500;
           fastcgi_cache_key http://$host$request_uri;
              }
          location ~ /test/ {
              auth_basic "gf";
              auth_basic_user_file /usr/local/nginx1.21.1/passwd;
              }
          }
      }
    • 切割日志脚本
    • cut_nginx_log.sh 
      #!/bin/bash
      #
      if [[ `id -u` != "0" ]]; then
          echo "Must by root !";
          exit 1;
      fi

      date=$(date +%F -d -1day)
      logdir=/var/log/nginx

      if [[ ! -d $logdir ]]; then
          echo "Log Dir is not found !"
          exit 2;
      elif [[ ! -d $logdir/cut ]] ; then 
          mkdir $logdir/cut &> /dev/null
      fi

      cd $logdir
      mv access.log cut/access_$date.log
      mv error.log cut/error_$date.log

      /usr/local/nginx1.21.1/sbin/nginx -s reload

      if [[ -n $logdir/cut/$date.tar.xz ]]; then
      tar -JcPf $logdir/$date.tar.xz cut/*
      fi

      rm -f cut/*.log

      if [[ -z `egrep -v "00 00 * * * /bin/bash /usr/local/nginx1.21.1/logs/cut_nginx_log.sh &> /dev/null" /var/spool/cron/root` ]]; then
      echo "00 00 * * * /bin/bash /usr/local/nginx1.21.1/logs/cut_nginx_log.sh &> /dev/null" >> /var/spool/cron/root
      fi

      find $logdir -type f -mtime +7 | xargs rm -rf {}

    展开全文
  • nginx写临时文件过程分析

    千次阅读 2014-03-15 21:32:27
    既然缓存在本地就要使用内存,如果一个请求的响应特别大,且可能nginx到客户端的发送速度比较慢就可能会导致请求全部缓存在内存中,导致内存使用偏高。nginx可以通过指令设置每个请求的响应body使用的缓冲区大小和...

    综述

            Nginx作为反向代理服务器时,从后端服务器接收响应数据缓存在本地并发送给客户端。既然缓存在本地就要使用内存,如果一个请求的响应特别大,且可能nginx到客户端的发送速度比较慢就可能会导致请求全部缓存在内存中,导致内存使用偏高。nginx可以通过指令设置每个请求的响应body使用的缓冲区大小和数量。当出现缓冲区不足时就要将部分缓冲区的数据写入临时文件中,以释放部分缓冲区可再次缓存数据。

    触发

            在ngx_event_pipe_read_upstream()从上游接收数据时首先得准备缓冲区以存放数据。此时有可能出现空闲缓冲区不足的情况,因此需要将部分内存响应数据写入临时文件以释放这些缓冲区,如下:
                // 迫不得已时才写临时文件
                } else if (p->cacheable
                           || p->temp_file->offset < p->max_temp_file_size)
                {
    
                    /*
                     * if it is allowed, then save some bufs from r->in
                     * to a temporary file, and add them to a r->out chain
                     */
                    rc = ngx_event_pipe_write_chain_to_temp_file(p);
    
                    ngx_log_debug1(NGX_LOG_DEBUG_EVENT, p->log, 0,
                                   "pipe temp offset: %O", p->temp_file->offset);
    
                    if (rc == NGX_BUSY) {
                        break;
                    }
       ......

    执行过程

            这个执行过程也很简单,主要分为三大步骤:1. 准备写入缓冲区;2.写入;3.更新状态并释放已写入的缓冲区。我们分别来阐述。
    • 准备写入缓冲区
                 我们可按照最简单的想法来理解:即一次选择部分in链表上的缓冲区写入,这里的部分是可以通过nginx指令配置的,即每次写入的字节数temp_file_write_size。选择好这些缓冲区就可以将它们从in链表上摘除了。
    • 写入
                 一旦准备好了数据,我们就可以写入了,写入的过程非常简单,就是调用操作系统接口写文件而已,当然这里还有些tricks,但我们并不太关心,调用的是函数ngx_write_chain_to_temp_file
    • 更新状态
                 这个过程比较有意思。因为nginx会维护一些响应状态,如响应是在内存中还是在临时文件中,在临时文件中的起始位置等等信息。后面的过滤、发送响应等过程都会依
    赖这些状态信息,因此,这个非常重要。还记得我在前一篇博客中描述的out链表么,这个链表上面存储的就是每段位于临时文件中的响应的状态信息,如起始、结束 偏移等等。nginx会将这些信息抽象存储在ngx_buf_t数据结构中,因此这里需要更新原有的ngx_buf_t结构或者创建新的结构。
                为什么会有更新原有的ngx_buf_t结构和创建新的ngx_buf_t结构这两种情况呢?这是因为每个ngx_buf_t管理的是一段响应的状态,如果本次写入的那段响应正好和最近一次写入的响应在偏移上是连续,那么我们只需更新现有的ngx_buf_t数据结构;否则,我们就需要创建并初始化新的ngx_buf_t结构了,然后再将该结构插入到out链表的尾部。
    • 释放已写入缓冲区
                 经过上面的步骤之后我们就可以释放已经写入临时文件的缓冲区了。这里也需要注意一个问题:nginx中存在所谓的"影子缓冲区"概念,即有些缓冲区管理结构可能会和其他的管理结构共享原始缓冲区,因此我们在释放的时候需要判断,如果是影子缓冲区,我们还必须得释放掉原始缓冲区(存放数据的缓冲区)。ngx_buf_t释放到free链表,而原始数据缓冲区则插入至free_raw_bufs链表的尾部。如下:
     for (cl = out; cl; cl = next) {
            next = cl->next;
    
            cl->next = p->free;
            p->free = cl;
    
            b = cl->buf;
    
    	// 如果是其他缓冲区的影子缓冲区
    	// 那么我们还得找到原始缓冲区并将原始缓冲区
    	// 归还给free_raw_bufs
            if (b->last_shadow) {
    
                tl = ngx_alloc_chain_link(p->pool);
                if (tl == NULL) {
                    return NGX_ABORT;
                }
    
                tl->buf = b->shadow;
                tl->next = NULL;
    
                *last_free = tl;
                last_free = &tl->next;
    
                b->shadow->pos = b->shadow->start;
                b->shadow->last = b->shadow->start;
    
                ngx_event_pipe_remove_shadow_links(b->shadow);
            }
        }
    展开全文
  • centOS7安装nginxnginx配置

    万次阅读 多人点赞 2019-05-09 14:59:19
    如果用来进行下载等应用磁盘io重负载应用,可设着off,以平衡磁盘与网络io处理速度,降低系统uptime。 #tcp_nopush on; #此选项允许或禁止使用socket的TCP_CORK的选项,此选项仅在sendfile的时候使用 #keepalive...

    安装所需插件

    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系列之一:nginx入门

    万次阅读 多人点赞 2019-05-11 17:06:35
    业界一致认为它是Apache2.2+mod_proxy_balancer的轻量级代替者,不仅是因为响应静态页面的速度非常快,而且它的模块数量达到Apache的近2/3。对proxy和rewrite模块的支持很彻底,还支持mod_fcgi、ssl、vhosts ,适合...
  • Nginx

    千次阅读 2020-11-05 17:16:33
    一.Nginx介绍 1.1前言 随着客户端用户不断增多,请求量增加,并发量增高,这是咱们需要搭建服务器的集群。 为什么使用Nginx? 客户端发送请求要发给哪台服务器? 如果所有客户端的请求都发给了服务器1? 客户端请求...
  • NGINX

    千次阅读 2019-03-07 23:33:09
    Nginx介绍 Nginx:engine X ,2002年,开源,商业版 NGINX是免费,开源,高性能的HTTP和反向代理服务器,邮件代理服务器,通用TCP/UDP代理服务器 解决C10K问题(10K Connections) 官网:...
  • Nginx 提升网站访问速度

    千次阅读 2014-03-20 10:22:02
    Nginx 简介 The article form here:http://www.ibm.com/developerworks/cn/web/wa-lo-nginx/ Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由...
  • nginx

    2019-06-11 19:40:57
    1. nginx简介 nginx(发音同engine x)是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行。 nginx由俄罗斯的程序设计师Igor Sysoev所开发,最初供俄国大型的...
  • 使用 Nginx 提升网站访问速度

    千次阅读 2017-09-20 18:17:53
    使用 Nginx 提升网站访问速度 Nginx 简介 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 ...
  • 快速入门Nginx

    万次阅读 2021-04-13 17:33:44
    快速入门Nginx 1. 什么是 Nginx Nginx (engine x) 是一个高性能的 HTTP 和反向代理 web 服务器。 Nginx 以事件驱动的方式编写,所以有...Nginx 支持热部署,启动速度特别快,还可以在不间断服务的情况下对软件版本
  • nginx安装及部署

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

    万次阅读 2021-07-27 12:59:03
    将网页中的 静态资源和 后台资源分开部署 提高用户访问静态代码的速度 降低对后台应用访问 常用命令 1. 启动 nginx 2. 关闭 nginx -s stop 3. 重启 nginx -s reload 4. 测试 配置文件 第一部分 : 全局块 配置...
  • Nginx 简介 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,它已经在该站点...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 53,611
精华内容 21,444
关键字:

nginx写的速度