6.5 KiB
layout, title, subtitle, date, author, catalog, header-img, tags
layout | title | subtitle | date | author | catalog | header-img | tags | ||
---|---|---|---|---|---|---|---|---|---|
post | 初试NGINX | A High Performance Web Server | 2022-06-25 20:27:31 | Manford Fan | false | img/post-bg-universe.jpg |
|
终于要开始记录NGIINX这个系列的主题了,MySQL准备再拖一拖,先把nginx这个过一遍。Nginx是一种高性能的Web服务器,起主要作用有三个:处理静态资源,反向代理(缓存&负载均衡)以及API服务(OpenResty)。当前网络上Web服务器很多,比如最老牌的Apache,Tomcat,微软的Microsoft IIS(Internet Information Services),还有Lighttpd,IBM的WebSphere服务器,Oracle的Weblogic,以及W3C的Jigsaw等等下图是2022年5月份Net Craft网站统计的各种服务器市场占有率排行,目前Nginx已经超越Apache跃居第一了!
一、Nginx概述
Nginx是由俄罗斯人伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,从2002开始开发,2004年发布了第一个版本,09年开始支持Windows版本,11年1.0版本发布,同时成立了nginx-plus商业公司15年发布了一个重要的功能,提供了stream四层反向代理,支持http2,截止到2022年6月,nginx最新稳定版本是1.22.0。
其核心特点如下
- 对操作系统内核深度挖掘,实现了高并发,高性能
- 优秀的模块化设计,生态圈号,可扩展性好
- 反向代理,负载均衡,保证了高可靠性
- 热部署,热升级
- BSD许可,可修改商用
二、Nginx构成,安装以及配置文件
如果把nginx比喻成一辆汽车,那么跟这辆车相关的部分可简单分为四部分——车身本体,驾驶员,GPS导航以及维修厂,对应于相关文件分别是由源码各个模块编译出来的可执行文件,控制nginx行为的nginx.conf配置文件,记录每一条访问的access.log文件,定位问题的error.log文件。如下是nginx安装包的所有文件列表及其对应的功能:
auto -------- 编译必须的工具以及操作系统判断相关的文件
CHANGES ----- 英文版变更列表
CHANGES.ru -- 俄语版变更列表
conf -------- 配置文件夹
configure --- configure脚本,保证正确编译
contrib ----- 两个perl脚本,一个vim辅助工具
html -------- html示例文件
LICENSE ----- license文件
man --------- 帮助文档
README ------ 说明文档
src --------- 源码文件
编译安装详见**Debian Server部署全过程记录**,这里着重记录下配置文件的语法。Nginx的配置文件是一个文本文件,存放在安装目录下的conf
文件夹里,通常是nginx.conf,不过也可以使用-c
选项手动指定。其语法规则基本如下:
- 配置文件由指令和指令块构成
- 每条指令以分号结尾,指令与参数之间用空格分隔
- 指令块用大括号将多条指令组织在一起
include
语句允许聚合多个配置文件以提高可维护性- 使用
#
符号作为注释,提高可读性 - 使用
$
符号做变量引用 - 部分指令参数支持正则表达式
- 包括四个块:http,upstream,server,location
更多配置选项,比如模块功能,变量使用,可以参考NGINX官方文档。
三、配置upstream
CDN(Content Delivery Networks)可能是一个比较小众的名词,不太为人所知,它的角色可以用现实中的快递小哥作类比,是名副其实的网络界的快递小哥。简单来说就是将客户网站允许被缓存的内容存储到CDN的服务器上,用户再次访问的时候,直接从CDN服务器返回即可(因为CDN服务器遍布全国,甚至全世界,而自己的服务器受地域,带宽,本机性能的影响)。没错,upstream
正是起关键作用的那一个,它可以将客户的内容以一定的算法存储起来,当用户需要的时候直接提供访问。
# 模拟客户源站
# ===============================================
server {
listen 127.0.0.1:8080;
location / {
alias /root/nginx/wiki/;
index index.html index.htm;
}
# 模拟CDN的VIP或RIP
# ===============================================
proxy_cache_path /tmp/nginxcache levels=1:2 keys_zone=mycache:100m
max_size=10G inactive=60m use_temp_path=off;
upstream local {
server 127.0.0.1:8080;
}
server {
listen 80;
server_name nginx.rustle.cc;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache mycache;
proxy_cache_key $host$uri$is_args$args;
proxy_cache_valid 200 302 304 1d;
proxy_pass http://local;
}
}
如上是第一个配置是nginx服务器,模拟的是客户源站,第二个配置是OpenResty服务器,模拟的是CDN的VIP或者RIP,条件有限,就在同一个机器上部署了,不过效果是一样的。当用户访问OpenResty配置的域名时,会缓存下所有的文件,此时停止nginx服务,再次访问域名仍然可以成功现实页面。
四、日志可视化工具-Go Access
五、其他补充
A. Nginx命令行
选项 | 功能 |
---|---|
-?,-h | this help |
-v | show version and exit |
-V | show version and configure options then exit |
-t | test configuration and exit |
-T | test configuration, dump it and exit |
-q | suppress non-error messages during configuration testing |
-s signal | send signal to a master process: stop, quit, reopen, reload |
-p prefix | set prefix path (default: /root/nginx/) |
-e filename | set error log file (default: logs/error.log) |
-c filename | set configuration file (default: conf/nginx.conf) |
-g directives | set global directives out of configuration file |
其中-s
选项支持stop
,start
,quit
,reload
和reopen
命令,功能分别是停止,启动,优雅退出,重载配置以及重新记录日志。
B. 单位相关
**时间单位 | 含义 | 空间单位 | 含义** |
---|---|---|---|
ms | 毫秒 | NULL | 不加单位,默认byte |
s | 秒 | k/K | kilobytes |
m | 分钟 | m/M | megabytes |
h | 小时 | g/G | gigabytes |
d | 天 | ||
w | 星期 | ||
M | 月 | ||
y | 年 |