This repository has been archived on 2023-11-13. You can view files and clone it, but cannot push or open issues or pull requests.
blog/_posts/2022-06-25-nginx_introduction.md
2023-06-03 15:58:09 +08:00

146 lines
6.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
layout : post
title : "初试NGINX"
subtitle : "A High Performance Web Server"
date : 2022-06-25 20:27:31
author : "Manford Fan"
catalog : false
header-img : "img/post-bg-universe.jpg"
tags :
- Nginx
- Server
---
终于要开始记录[NGIINX](https://nginx.org/)这个系列的主题了MySQL准备再拖一拖先把nginx这个过一遍。Nginx是一种高性能的Web服务器起主要作用有三个处理静态资源反向代理缓存&负载均衡以及API服务OpenResty。当前网络上Web服务器很多比如最老牌的ApacheTomcat微软的Microsoft IISInternet Information Services还有LighttpdIBM的WebSphere服务器Oracle的Weblogic以及W3C的Jigsaw等等下图是2022年5月份[Net Craft](https://news.netcraft.com/)网站统计的各种服务器市场占有率排行目前Nginx已经超越Apache跃居第一了
![nginx-1-ranking](/img/posts/nginx-1-ranking.png 'nginx-1-ranking')
## 一、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安装包的所有文件列表及其对应的功能
```text
auto -------- 编译必须的工具以及操作系统判断相关的文件
CHANGES ----- 英文版变更列表
CHANGES.ru -- 俄语版变更列表
conf -------- 配置文件夹
configure --- configure脚本保证正确编译
contrib ----- 两个perl脚本一个vim辅助工具
html -------- html示例文件
LICENSE ----- license文件
man --------- 帮助文档
README ------ 说明文档
src --------- 源码文件
```
编译安装详见**[Debian Server部署全过程记录](https://blog.rustle.cc/2022/03/29/debian_server/#4%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85nginx)**这里着重记录下配置文件的语法。Nginx的配置文件是一个文本文件存放在安装目录下的`conf`文件夹里通常是nginx.conf不过也可以使用`-c`选项手动指定。其语法规则基本如下:
1. 配置文件由指令和指令块构成
2. 每条指令以分号结尾,指令与参数之间用空格分隔
3. 指令块用大括号将多条指令组织在一起
4. `include`语句允许聚合多个配置文件以提高可维护性
5. 使用`#`符号作为注释,提高可读性
6. 使用`$`符号做变量引用
7. 部分指令参数支持正则表达式
8. 包括四个块httpupstreamserverlocation
更多配置选项,比如模块功能,变量使用,可以参考[NGINX官方文档](https://nginx.org/en/docs/)。
## 三、配置upstream
CDNContent Delivery Networks可能是一个比较小众的名词不太为人所知它的角色可以用现实中的快递小哥作类比是名副其实的网络界的快递小哥。简单来说就是将客户网站允许被缓存的内容存储到CDN的服务器上用户再次访问的时候直接从CDN服务器返回即可因为CDN服务器遍布全国甚至全世界而自己的服务器受地域带宽本机性能的影响。没错`upstream`正是起关键作用的那一个,它可以将客户的内容以一定的算法存储起来,当用户需要的时候直接提供访问。
```nginx
# 模拟客户源站
# ===============================================
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|年|||
## 六、参考文档
- []()