[关闭]
@WillireamAngel 2018-05-14T13:19:37.000000Z 字数 3058 阅读 1017

Nginx

Linux


一、架构

1. 系统管理

(1)常见命令

  1. nginx -c [config flie]
  2. nginx -t #调试配置文件,不运行

(2)系统进程控制

主进程:/usr/local/nginx/logs/nginx.pid

TERM, INT 快速关闭
QUIT 从容关闭
HUP 重载配置用新的配置、开始新的工作进程、从容关闭旧的工作进程
USR1 重新打开日志文件
USR2 平滑升级可执行程序
WINCH 从容关闭工作进程

(3)平滑更新/升级

2. 系统优化

(1)hash表

Hash table和Hash map的差别?(JAVA)
- HashTable 基于 Dictionary 类,而 HashMap 是基于 AbstractMap。Dictionary 是任何可将键映射到相应值的类的抽象父类,而 AbstractMap 是基于 Map 接口的实现,它以最大限度地减少实现此接口所需的工作。
- HashMap 的 key 和 value 都允许为 null,而 Hashtable 的 key 和 value 都不允许为 null。HashMap 遇到 key 为 null 的时候,调用 putForNullKey 方法进行处理,而对 value 没有处理;Hashtable遇到 null,直接返回 NullPointerException。
- Hashtable 方法是同步,而HashMap则不是。我们可以看一下源码,Hashtable 中的几乎所有的 public 的方法都是 synchronized 的,而有些方法也是在内部通过 synchronized 代码块来实现。所以有人一般都建议如果是涉及到多线程同步时采用 HashTable,没有涉及就采用 HashMap,但是在 Collections 类中存在一个静态方法:synchronizedMap(),该方法创建了一个线程安全的 Map 对象,并把它作为一个封装的对象来返回。
- 如果你不需要线程安全,那么使用HashMap,如果需要线程安全,那么使用ConcurrentHashMap,Hash table已经被淘汰了。

(2)事件模型

I/O多路复用:单个线程,通过记录跟踪每个I/O流(sock)的状态,来同时管理多个I/O流 。

3. 系统比较

(1)web服务器

(2)负载均衡

(3)代理

在什么情况下使用Nginx比使用squid要好? 反之亦然。
大体上来说nginx主要用于反向加速代理而不是像squid那样做为常规代理服务器。Nginx的最大优势在于高负载情况下内存和CPU的低消耗。 我不认为squid能给你带来比nginx更好的性能。

我能关闭从代理服务器到后端服务器的缓存吗或者使用上传进度特性?
没法

(5)负载均衡算法
- 轮询(默认)
- weight
- ip_hash
- fair(第三方)
- url_hash(第三方)

二、配置

1. rewrite

(1)正则匹配与判断

(2)全局变量

  1. 1.$args
  2. 2.$content_length
  3. 3.$content_type
  4. 4.$document_root
  5. 5.$document_uri
  6. 6.$host
  7. 7.$http_user_agent
  8. 8.$http_cookie
  9. 9.$limit_rate
  10. 10.$request_body_file
  11. 11.$request_method
  12. 12.$remote_addr
  13. 13.$remote_port
  14. 14.$remote_user
  15. 15.$request_filename
  16. 16.$request_uri
  17. 17.$query_string
  18. 18.$scheme
  19. 19.$server_protocol
  20. 20.$server_addr
  21. 21.$server_name
  22. 22.$server_port
  23. 23.$uri
  24. ...

(3)flag标记

flag标记有:

(4)实例

三、模块

四、常见问题

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注