nginx-ep1
nginx-ep1
NGINX的基础介绍
webserver的历史,没事看看就当看营销号了,nginx默认使用多进程复用CGI
Nginx开源版
Nginx plus商业版,开箱即用但是要付钱,集成了一些功能。
Open Resty OpenResty是一个基于Nginx与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。更适用于需要大量二次开发的场景,有极强的扩展性
Tengine 淘宝定制的nginx版本,添加了很多特性,- 相比于Open Resty,扩展性不够强,但是能够满足绝多数使用场景
nginx中文开源社区
源码编译安装需要的依赖gcc PCRE zlib OpenSSLnginx -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
目录功能
CGI的各种配置文件,建议cgi类的文件提前复制一次,后缀改为default备份
mime.types 记录了所有的类型配置头文件的时候用的上/usr/share/nginx
下面还有一些文件,html是默认配置w文件读取网页的地方/usr/sbin/nginx
,/sbin/nginx
是nginx的程序执行文件
命令
使用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发送信号控制
使用信号控制Masterps -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/;
}
}
}