nginx-ep1

ooowl
  • 系统设计
  • 网关
  • 网关
  • nginx
About 6 min

nginx-ep1

NGINX的基础介绍

webserver的历史open in new window,没事看看就当看营销号了,nginx默认使用多进程复用CGI
Nginx开源版open in new window
Nginx plus商业版,开箱即用但是要付钱,集成了一些功能。
Open Restyopen in new window OpenResty是一个基于Nginx与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。更适用于需要大量二次开发的场景,有极强的扩展性
Tengineopen in new window 淘宝定制的nginx版本,添加了很多特性,- 相比于Open Resty,扩展性不够强,但是能够满足绝多数使用场景
nginx中文开源社区open in new window

源码编译安装需要的依赖gcc PCRE zlib OpenSSL
nginx -v/V 获得版本(详细信息,包括编译的时候指定的各种路径等)
如果要删除的话需要先关闭nginx,再删除本体,最后清理编译环境

一些路径:

  • 源码安装的时候会安装到/usr/local/nginx
  • 使用包管理器安装的话安装在/etc/nginx
  • 日志默认在/logs/access.log,/logs/error.log
  • 默认的 PID 文件路径通常为:/var/run/nginx.pid,cat这个会返回nginx的进程好
  • 默认的锁文件路径为:/var/run/nginx.lock

目录功能

800 CGI的各种配置文件,建议cgi类的文件提前复制一次,后缀改为default备份
mime.types 记录了所有的类型配置头文件的时候用的上
/usr/share/nginx 下面还有一些文件,html是默认配置w文件读取网页的地方
/usr/sbin/nginx/sbin/nginx 是nginx的程序执行文件 900

命令

使用linux命令

此方式依赖nginx的pid文件默认是从/run/nginx.pid来读取的。如果你另外配置了nginx的pid的文件的位置,则会导致命令执行失败。报错信息为:

nginx: [error] open() "/var/run/nginx.pid" failed (2: No such file or directory)

此时就必须用拿到PID并发送信号
nginx 的命令很少

nginx -g "daemon on;" 使用守护进程模式启动nginx,即不在控制台打印日志,默认是on,可以手动使用off启动  
nginx -s quit 优雅停止nginx,nginx会等待所有请求处理完毕后才停止;
nginx -s stop 快速停止nginx,不等待请求是否处理完毕;
nginx -s reload
配置文件修改完,reload加载新的配置。
当执行此命令时,nginx会检查配置文件的语法并尝试使用新的配置
如果成功,nginx将会以新的配置启动新的工作进程,并向旧的工作进程发送关闭信号
否则,主进程回滚更改并继续使用旧的配置和旧的工作进程。当旧进程收到关闭信号后,它将会停止接受新的请求,并在处理完旧请求的自行退出。

nginx -s reopen 更改滚动日志句柄
nginx -t/T 检查所有的配置文件是否合法 如果用T的话会返回成功的文件内容,又臭又长
nginx -c 指定文件路径

📌Tip

更改滚动日志句柄这在我们的日志文件过大时,我们将日志文件mv后,发现日志文件仍在写入,这是由于mv后的文件inode相关信息不变,进行还会将日志写入到该文件中。这时我们就可以执行reopen操作,nginx就会关闭原来的句柄,在配置的日志目录下重新创建新的日志文件来进行日志记录。

其他的不是很常用

服务信号

此方式进行起停,通过向master发送信号控制

使用信号控制Master
ps -ef | grep nginx 查看nginx 的所有进程,发送信号需要发送给master

kill -信号 PID
- TERM, INT 作用和 nginx -s stop一致;也可kill -9 PID
- QUIT 作用和 nginx -s quit一致;
- HUP 作用和 nginx -s reload一致;
- USR1 作用和 nginx -s reopen一致;
- USR2 平滑升级(用到了再去看,基本原理就是把PID开副本,升级完了在换回来,只替换sbin的nginx执行文件就行了)

祖传的pagespeed

使用google的pagespeed 优化nginx提高网页访问速度

# 先放师哥的祖传优化配置,单体绝对够用的,在框架和DB出现瓶颈之前它绝对不会出瓶颈

user root;  
worker_processes auto;  
pid /run/nginx.pid;  
  
# include /etc/nginx/modules-enabled/*.conf;  
  
events {  
   worker_connections 16383;  
   # multi_accept on;  
}  
  
http {  
  
   ##  
   # Basic Settings   ##  
   sendfile on;  
   client_max_body_size 256m;  
   tcp_nopush on;  
   tcp_nodelay on;  
   keepalive_timeout 65;  
   types_hash_max_size 2048;  
   # server_tokens off;  
  
   # server_names_hash_bucket_size 64;   # server_name_in_redirect off;  
   include /etc/nginx/mime.types;  
   default_type application/octet-stream;  
  
   ##  
   # SSL Settings   ##  
   ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE  
   ssl_prefer_server_ciphers on;  
  
   ##  
   # Logging Settings   ##  
   access_log /var/log/nginx/access.log;  
   error_log /var/log/nginx/error.log;  
  
   add_header X-Content-Type-Options "nosniff";  
   ##  
   # Enable PageSpeed   ##  
   pagespeed on;  
  
   #启用PageSpeed Gzip请求资源,此项要求ng启用gzip  
   #pagespeed FetchWithGzip on;  
   #配置筛选项默认CoreFilters  
   pagespeed RewriteLevel CoreFilters;  
  
   #是否尊重原始header,为了达到优化最大效果,官方建议不开启  
   pagespeed RespectVary off;  
  
   # ···是否让PageSpeed优化缓存时间(接管缓存控制)  
   pagespeed DisableRewriteOnNoTransform off;  
  
   #重写HTML缓存头,官方不建议关闭,默认会统计执行为Cache-Control: no-cache, max-age=0  
   pagespeed ModifyCachingHeaders on;  
  
   #列出未解决的错误  
   pagespeed ListOutstandingUrlsOnError on;  
  
   # ···限制资源最大值启用优化,默认大小16M  
   pagespeed MaxCacheableContentLength 16777216;  
  
   # 单个js文件最大大小,配合combine_javascript使用,该数值过小会引起js文件不合并  
   pagespeed MaxCombinedJsBytes 921600;  
  
   #配置共享内存元数据缓存  
   pagespeed CreateSharedMemoryMetadataCache "/var/cache/pagespeed/" 51200;  
  
   #配置文件高速缓存  
   pagespeed FileCachePath /var/cache/pagespeed;  
   pagespeed FileCacheSizeKb 102400;  
   pagespeed FileCacheCleanIntervalMs 3600000;  
   pagespeed FileCacheInodeLimit 500000;  
  
   # 为了优化性能,可以写LRU缓存,nginx使用更少的进程,LRUCacheKbPerProcess可以适当大点  
   pagespeed LRUCacheKbPerProcess 8192;  
   pagespeed LRUCacheByteLimit 16384;  
  
   #缓存清除,比较方便的管理方式是,通过admin页面管理(自己可以通过配置开启)  
   pagespeed EnableCachePurge on;  
   pagespeed PurgeMethod PURGE;  
  
  
   #PageSpeed管理页面配置  
   #共享内存统计  
   pagespeed Statistics on;  
   #开启虚拟主机统计信息  
   pagespeed UsePerVhostStatistics on;  
   pagespeed StatisticsLogging on;  
   pagespeed StatisticsLoggingIntervalMs 60000;  
   pagespeed StatisticsLoggingMaxFileSizeKb 1024;  
   #消息缓冲区大小,默认为0,不保留消息  
   pagespeed MessageBufferSize 100000;  
   pagespeed LogDir /var/log/pagespeed;  
   pagespeed StatisticsPath /ngx_pagespeed_statistics;  
   pagespeed GlobalStatisticsPath /ngx_pagespeed_global_statistics;  
   pagespeed MessagesPath /ngx_pagespeed_message;  
   pagespeed ConsolePath /pagespeed_console;  
   pagespeed AdminPath /pagespeed_admin;  
   pagespeed GlobalAdminPath /pagespeed_global_admin;  
  
   ##  
   # Gzip Settings   ##  
   gzip on;  
   gzip_disable "msie6";  
   gzip_vary on;  
   gzip_proxied any;  
   gzip_comp_level 6;  
   gzip_buffers 16 8k;  
   gzip_http_version 1.1;  
   gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;  
  
   ##  
   # Virtual Host Configs   ##  
   server {  
        location / {  
            root   /usr/share/nginx/html;  
            index  index.html index.htm;  
        }  
  
        location /api {  
         rewrite  ^/api/(.*)$ /$1 break;   
client_max_body_size    20m;  
         proxy_set_header Host $proxy_host;  
         proxy_set_header X-Real-IP $remote_addr;  
         proxy_set_header REMOTE-HOST $remote_addr;  
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
         proxy_pass http://cda-server:8092/api;  
        }  
  
        location /api/api {  
         rewrite  ^/api/(.*)$ /$1 break;   
client_max_body_size    20m;  
         proxy_set_header Host $proxy_host;  
         proxy_set_header X-Real-IP $remote_addr;  
         proxy_set_header REMOTE-HOST $remote_addr;  
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
         proxy_pass http://cda-server:8092/api;  
        }  
  
      location /escs {  
         rewrite  ^/api/(.*)$ /$1 break;   
client_max_body_size    20m;  
         proxy_set_header Host $proxy_host;  
         proxy_set_header X-Real-IP $remote_addr;  
         proxy_set_header REMOTE-HOST $remote_addr;  
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
         proxy_pass http://cda-rabbitmq:15672/api/queues/;  
        }  
  
   }  
}  

Loading...