前言

Nginx 作为高性能的 http 服务器,知名度不必多言,相似产品中无出其右。本篇随笔记录我认为较为重要的原理和配置。

1. 原理解析

1.1 结构



以上是 Nginx 的结构图,其包含一个 master 和 n 个 worker,master_processes 用于外部通信和统一管理其下 worker_processes ,因此可以做到重启时不中断服务。另外,Nginx 采用了异步非阻塞的方式来处理请求,避免了 cpu 闲置,这是其高性能的主要原由。

1.2 模块

Nginx 从功能上可分为以下三大类:

  • Handlers(处理器模块):用于直接处理请求,并进行输出内容和修改 headers 信息等操作,一般只能有一个。

  • Filters(过滤器模块):主要对处理器模块输出的内容进行修改操作,然后输出。

  • Proxies(代理模块):主要是 upstream 模块,与后端一些服务比如 FastCGI 等进行交互,实现服务代理和负载均衡等功能。

1.3 工作流程



上图是 Nginx 常规的 HTTP 请求和响应过程,当接到请求时,通过查找配置文件将其映射到一个 location block,并按照其中所配置的各个指令,启动不同的模块去完成工作。通常一个 location 中的指令会涉及一个

handler 模块和多个 filter 模块。另外,Nginx 的模块属于静态编译方式,在启动后自动加载。

2. 配置摘要

Nginx 对于我来说最常规的运用就是静态资源处理和反向代理,因此我只记录这些相关的配置。Nginx 配置一般分为三部分:global、events 和 http,通用基本配置一般保存在 /etc/nginx/nginx.conf 文件中,具体的服务配置一般保存在 /etc/nginx/conf.d/ 文件夹下。

2.1 Global 和 Events 配置

一般在 nginx.conf 配置文件的开头位置设置一些与具体业务无关的参数,如下:

user  nginx; # 用户或者用户组
worker_processes 2; # worker 进程数,一般与服务器的虚拟内核数相等 error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

Events 中需要自行调整的就一个必要参数:worker_connections,这个数值涉及到最大连接数的计算,即:

# nginx 作为 http 服务器的时候:
max_clients = worker_processes * worker_connections # nginx作为反向代理服务器的时候:
max_clients = worker_processes * worker_connections/4

当然这个最大连接数还与系统可打开的最大文件数有关,max_clients 必须要小于 file-max(cat /proc/sys/fs/file-max),我的配置:

events {
worker_connections 2048;
}

2.2 http 服务器配置

2.2.1 全局配置

一般情况下虚拟主机以外的配置保持默认就行了,如:gzip 压缩,ip 获取等一般都交给云服务器的负载均衡处理了,写一下默认值吧:

http {
include /etc/nginx/mime.types;
default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on;
#tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf;
}

2.2.2 server 虚拟主机配置

真正的与业务相关的配置都在这个小节,顺着流程来讲吧。现在不论是公司站还是个人站都应该普及了 https 了吧(运营商的 http 劫持实在太流氓了,特别是手机端的 web,再强调一遍,流氓,流氓...),这里面涉及到一个 https 强制跳转问题,可以让负载均衡的 80 端口来监听服务器的 81 端口进行重定向:

server {
listen 81;
return 301 https://$host$request_uri;
}

如果是静态网页相关的配置,可以参考default.conf

server {
listen 80;
server_name localhost; #charset koi8-r;
#access_log /var/log/nginx/host.access.log main; location / {
root /usr/share/nginx/html;
index index.html index.htm;
} #error_page 404 /404.html; # redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}

Nginx 更多的情况是用作反向代理:

server
{
listen 80;
server_name x.youclk.com;
location / {
proxy_pass http://x;
# Proxy Settings
# proxy_redirect off;
# proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
} server
{
listen 80;
server_name y.youclk.com;
location / {
proxy_pass http://y;
}
}

3. 命令摘要

没啥好说的,不做特殊用途的话以下命令能够满足操作了:

service nginx {start|stop|status|restart|reload|configtest}

结语

本篇随笔可以说是 Nginx 的一些基本摘要,使用和原理方面都没有深入探究,后续如果使用到更高级功能或者有新的应用场景,再来继续补充内容。


我的公众号《有刻》,我们共同成长!

Nginx 原理解析和配置摘要的更多相关文章

  1. 三、Nginx原理解析

    Nginx原理解析 一.反向代理 工作流程 用户通过域名发出访问Web服务器的请求,该域名被DNS服务器解析为反向代理服务器的IP地址: 反向代理服务器接受用户的请求: 反向代理服务器在本地缓存中查找 ...

  2. 12: nginx原理及常用配置

    1.1 nginx基本介绍 1.nginx高并发原理( 多进程+epoll实现高并发 ) 1. Nginx 在启动后,会有一个 master 进程和多个相互独立的 worker 进程. 2. 每个子进 ...

  3. 6_1.springboot2.x整合JDBC与数据源配置原理解析

    1.引言 对于数据访问层,无论是SQL还是NOSQL,Spring Boot默认采用整合 Spring Data的方式进行统一处理,添加大量自动配置,屏蔽了很多设置.引入各种xxxTemplate,x ...

  4. APPcrawler基础原理解析及使用

    一.背景 一年前,我们一直在用monkey进行Android 的稳定性测试 ,主要目的就是为了测试app 是否会产生Crash,是否会有ANR,页面错误等问题,在monkey测试过程中,实现了脱离Ca ...

  5. (转)Apache和Nginx运行原理解析

    Apache和Nginx运行原理解析 原文:https://www.server110.com/nginx/201402/6543.html Web服务器 Web服务器也称为WWW(WORLD WID ...

  6. Nginx 笔记(四)nginx 原理与优化参数配置 与 nginx 搭建高可用集群

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.nginx 原理与优化参数配置 ​ ​ master-workers 的机制的好处 首先,对于每个 ...

  7. Nginx原理和配置总结

    一:前言 Nginx是一款优秀的HTTP服务器和反向代理服务器,除却网上说的效率高之类的优点,个人的切身体会是Nginx配置确实简单而且还好理解,和redis差不多,比rabbitmq好理解太多了: ...

  8. Nginx 反向代理工作原理简介与配置详解

    Nginx反向代理工作原理简介与配置详解   by:授客  QQ:1033553122   测试环境 CentOS 6.5-x86_64 nginx-1.10.0 下载地址:http://nginx. ...

  9. [Linux.NET]Nginx 泛解析配置请求映射到多端口实现二级域名访问

    由于想实现一个域名放置多个应用运行的目的,而不想通过域名后加端口号方式处理,这种方式处理记起来太麻烦,偷懒党简直不能忍,故而考虑了使用二级域名来处理多个应用同时运行.Google了一番资料并进行了尝试 ...

随机推荐

  1. Hadoop学习笔记一

    云帆大数据视频学习笔记,记录如下. 一.主机名设置的规范 /etc/hosts文件中添加如下的记录: 192.168.1.128 hadoop-yarn.cloudyhadoop.com had-ya ...

  2. Oracle常见授权与回收权限——grant和revoke

    1.GRANT 赋于权限常用的系统权限集合有以下三个:CONNECT(基本的连接), RESOURCE(程序开发), DBA(数据库管理) 常用的数据对象权限有以下五个:ALL ON 数据对象名, S ...

  3. 【OCR技术系列之四】基于深度学习的文字识别(3755个汉字)

    上一篇提到文字数据集的合成,现在我们手头上已经得到了3755个汉字(一级字库)的印刷体图像数据集,我们可以利用它们进行接下来的3755个汉字的识别系统的搭建.用深度学习做文字识别,用的网络当然是CNN ...

  4. HDU [P1151] Air Raid

    二分图匹配求DAG图上的最小路径覆盖 应用了拆点的思想,将DAG图上的每一个点拆成二分图的x集合与y集合,对于一条有向边u->v来说,我们在ux与vy之间连一条边,然后求二分图的最大匹配 DAG ...

  5. 洛谷 [P1265] 公路修建

    本题的描述:城市联盟,最短距离.. 使人想到了prim求MST,再一看数据范围:完全图!,那么一定得用prim,因为只有5000个点,所以不加优化的prim就能过. #include <iost ...

  6. POJ1743 Musical Theme [后缀自动机]

    题意:不重叠最长重复子串 后缀数组做法:http://www.cnblogs.com/candy99/p/6227659.html 后缀自动机的话,首先|Right|>=2 然后min(t[u] ...

  7. weblogic修改jdk版本遇到的问题与解决方法

    1.修改setDomainEnv ,路径.../domains/xx_domain\bin\ 1.1修改JAVA_HOME为需要修改的路径 注意:BEA_JAVA_HOME路径不需修改 2.修改路径后 ...

  8. [Python Study Notes] 变量/编码/注释

    Ps:我这里选择的IDE为pycharm,个人感觉还是比较好用的. 1.变量 声明变量/赋值变量 #_*_ coding:utf-8 _*_ # author = "liu" ab ...

  9. MySQL select语句直接导出数据

    select * into outfile '文件存放路径' from 表名; (先记下来,还未测试)

  10. 教我徒弟Android开发入门(二)

    前言: 上一期实现了简单的QQ登录效果,这一期继续对上一期进行扩展 本期的知识点: Toast弹窗,三种方法实现按钮的点击事件监听 正文:   Toast弹窗其实很简单,在Android Studio ...