Nginx如今几乎是众多大型网站的必用技术,你们应该都知道Nginx被F5收购的大事件,章亦春也在专心维护OpenResty项目构建和谐家园,不管你选择Nginx仍是OpenResty,都须要对Nginx有一个比较全面的了解,往后才能作到事半功倍。本文以开发者必备的Nginx基础知识为主,在参考文章中罗列了目前比较优秀的Nginx和OpenResty参考教程,但愿对你们有帮助。html
Nginx基础知识从小白到入门
2019年11月12日 - 初稿前端
阅读原文 - https://wsgzao.github.io/post...nginx
扩展阅读git
nginx.orggithub
NGINX Plusweb
Nginx是什么?
Nginx 是一个 web 服务器,主要处理客户端和服务器的请求分发。api
特色和优点
使用和扩展
开源免费的Nginx与商业版Nginx Plus,与之对应的是免费OpenResty与商业版OpenRestybash
陶辉《深刻理解 Nginx》做者在极客时间上的讲义PDF已经介绍的很是详细了,若是以为课程不错能够选择购买尽可能少走弯路
极客时间:nginx核心知识100讲配置文件与代码分享服务器
为了便于理解,首先先来了解一下一些基础知识,nginx是一个高性能的反向代理服务器那么什么是反向代理呢?
代理是在服务器和客户端之间假设的一层服务器,代理将接收客户端的请求并将它转发给服务器,而后将服务端的响应转发给客户端。
不论是正向代理仍是反向代理,实现的都是上面的功能。
若是你对OSI 七层模型与 TCP/IP 四层模型不是很熟悉能够再回顾下
正向代理
正向代理(forward)意思是一个位于客户端和原始服务器 (origin server) 之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标 (原始服务器),而后代理向原始服务器转交请求并将得到的内容返回给客户端。
正向代理是为咱们服务的,即为客户端服务的,客户端能够根据正向代理访问到它自己没法访问到的服务器资源。
正向代理对咱们是透明的,对服务端是非透明的,即服务端并不知道本身收到的是来自代理的访问仍是来自真实客户端的访问。
反向代理
反向代理(Reverse Proxy)方式是指以代理服务器来接受 internet 上的链接请求,而后将请求转发给内部网络上的服务器,并将从服务器上获得的结果返回给 internet 上请求链接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
反向代理是为服务端服务的,反向代理能够帮助服务器接收来自客户端的请求,帮助服务器作请求转发,负载均衡等。
反向代理对服务端是透明的,对咱们是非透明的,即咱们并不知道本身访问的是代理服务器,而服务器知道反向代理在为他服务。
安装nginx时一般须要编译本身须要的模块,能够使用 rpmbuild 制做 Nginx 的 RPM 包
main # 全局配置 events { # nginx工做模式配置 } http { # http设置 .... server { # 服务器主机配置 .... location { # 路由配置 .... } location path { .... } location otherpath { .... } } server { .... location { .... } } upstream name { # 负载均衡配置 .... } }
若是想要生成nginx规范配置,能够参考nginxconfig.io
下面是 nginx
一些配置中经常使用的内置全局变量,你能够在配置的任何位置使用它们。
变量名 | 功能 |
---|---|
$host |
请求信息中的 Host ,若是请求中没有 Host 行,则等于设置的服务器名 |
$request_method |
客户端请求类型,如 GET 、POST |
$remote_addr |
客户端的 IP 地址 |
$args |
请求中的参数 |
$content_length |
请求头中的 Content-length 字段 |
$http_user_agent |
客户端 agent 信息 |
$http_cookie |
客户端 cookie 信息 |
$remote_addr |
客户端的 IP 地址 |
$remote_port |
客户端的端口 |
$server_protocol |
请求使用的协议,如 HTTP/1.0 、HTTP/1.1\ |
$server_addr |
服务器地址 |
$server_name |
服务器名称 |
$server_port |
服务器的端口号 |
Upstream 指定后端服务器地址列表,在 server 中拦截响应请求,并将请求转发到 Upstream 中配置的服务器列表。
upstream balanceServer { server 10.1.22.33:12345; server 10.1.22.34:12345; server 10.1.22.35:12345; } server { server_name fe.server.com; listen 80; location /api { proxy_pass http://balanceServer; } }
上面的配置只是指定了 nginx 须要转发的服务端列表,并无指定分配策略。
默认状况下采用的是轮询策略,将全部客户端请求轮询分配给服务端。这种策略是能够正常工做的,可是若是其中某一台服务器压力太大,出现延迟,会影响全部分配在这台服务器下的用户。
# 快速关闭Nginx,可能不保存相关信息,并迅速终止web服务 nginx -s stop # 平稳关闭Nginx,保存相关信息,有安排的结束web服务 nginx -s quit # 因改变了Nginx相关配置,须要从新加载配置而重载 nginx -s reload # 从新打开日志文件 nginx -s reopen # 为 Nginx 指定一个配置文件,来代替缺省的 nginx -c filename # 不运行,而仅仅测试配置文件。nginx 将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件 nginx -t # 显示 nginx 的版本 nginx -v # 显示 nginx 的版本,编译器版本和配置参数 nginx -V # 格式换显示 nginx 配置参数 2>&1 nginx -V | xargs -n1 2>&1 nginx -V | xargs -n1 | grep lua
以上内容只是nginx的冰山一角,我我的推荐你们跟着官方文档或者相似极客时间的教程学习,能够少走不少弯路
如下为极客时间专栏