Nginx简介

Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。

  1. Nginx是一款轻量级的Web服务器/反向代理服务器以及电子邮件代理服务器,并在一个BSD-like协议下发行。由俄罗斯的程序设计师lgor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。
  2. Nginx相较于Apache\lighttpd具有占有内存少,稳定性高等优势,并且依靠并发能力强,丰富的模块库以及友好灵活的配置而闻名。在Linux操作系统下,nginx使用epoll事件模型,得益于此,nginxLinux操作系统下效率相当高。同时NginxOpenBSDFreeBSD操作系统上采用类似于Epoll的高效事件模型kqueue.

Nginx 的优势

  1. 使用 Nginx 做静态资源服务器:Java 中的资源可以分为动态和静态,动态需要经过 Tomcat 解析之后,才能返回给浏览器,例如 JSP 页面、Freemarker 页面、控制器返回的 JSON 数据等,都算作动态资源,动态资源经过了 Tomcat 处理,速度必然降低。对于静态资源,例如图片、HTMLJSCSS 等资源,这种资源可以不必经过 Tomcat 解析,当客户端请求这些资源时,之间将资源返回给客户端就行了。此时,可以使用 Nginx 搭建静态资源服务器,将静态资源直接返回给客户端。
  2. 使用 Nginx 做负载均衡服务器,无论是使用 Dubbo 还是 Spirng Cloud ,除了使用各自自带的负载均衡策略之外,也都可以使用 Nginx 做负载均衡服务器。<br />支持高并发、内存消耗少、成本低廉、配置简单、运行稳定等。

Nginx VS Apache

  1. 相同点:<br />1、都是HTTP服务器软件<br />2、功能上都采用模块化结构设计<br />3、都支持通用的语言接口,如PHPPerlPython等<br />4、支持正向、反向代理、虚拟主机、URL重写、压缩传输、SSL加密传输
  2. 不同点:<br />1Apache处理速度很慢,占用很多内存资源<br />2、功能上,Apache所有模块支持动静态编译,Nginx模块都是静态编译的<br />3、对Fcgi的支持:Apache支持的很不好,Nginx支持非常好<br />4、处理连接方式:Nginx支持epoll,Apache不支持<br />5、空间使用上:Nginx安装包仅几百K

名词解释

代理服务器

  1. 一般是指局域网内部的机器通过代理服务器发送请求到互联网上的服务器,代理服务器一般作用在客户端。

反向代理

  1. 客户端(用户A)向反向代理的命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端。而客户端始终任务它访问的事原始服务器B而不是服务器Z。由于防火墙作用,只允许服务器Z进出,防火墙和反向代理共同作用保护了院子资源服务器B。<br />![](https://cdn.nlark.com/yuque/0/2021/png/21368160/1618222010168-67567beb-d8e4-4377-b2a7-20bc706b58bc.png#align=left&display=inline&height=198&margin=%5Bobject%20Object%5D&originHeight=198&originWidth=652&size=0&status=done&style=none&width=652)<br /> 用途:将防火墙后面的服务器提供给Internet用户访问。反向代理还可以为后端的多台服务器提供负载平衡或为后端较慢的服务器提供缓冲服务。

正向代理

  1. 正向代理是一个位于客户端A和原始服务器(服务器B)之间的服务器(代理服务器Z),为了从原始服务器取得内容,用户A向代理服务器Z发送一个请求并指定目标(服务器B),然后代理服务器Z向服务器B转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。<br />![](https://cdn.nlark.com/yuque/0/2021/png/21368160/1618222037169-a48fea9f-c5e4-45bc-be11-812935c82fbb.png#align=left&display=inline&height=317&margin=%5Bobject%20Object%5D&originHeight=317&originWidth=641&size=0&status=done&style=none&width=641)<br /> 用途:在防火墙内的局域网客户端提供访问Internet的途径。还可以使用缓冲特性减少网络使用率。

从安全性来讲:

  1. 正向代理允许客户端通过它访问任意网站并且隐藏客户端自身,因此你必须采取安全措施以确保仅为经过授权的客户端提供服务。 <br /> 反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。

Nginx官网:点击跳转

http://nginx.org/en/download.html

Nginx安装

1,准备软件包,本次使用nginx-1.16.1

  1. wget http://nginx.org/download/nginx-1.16.1.tar.gz
  2. #下载后,解压到/usr/local/下
  3. tar zxf nginx-1.16.1.tar.gz -C /usr/local/

2,Nginx需要三个模块,需要安装依赖包

一,Ssl模块:
主要是用于支持https请求,https请求由于建立连接过程中秘钥的协商,以及信息传输加密耗时过大,所以建议只在传输登录、表单等敏感数据的时候使用,其他的情况建议仍然使用http请求。

二,Pcre模块
该模块主要包含了一套正则表达式相关函数,可以用在nginx中的location路径过滤中,如果需要location路径的正则表达式的过滤,那么必须要在编译安装nginx的时候关联该模块。

三,Zlib模块
该模块包含了数据压缩相关算法,可以支持nginx数据压缩传输,针对网络带宽差的情况下,可以明显提高客户端的相应速度,可选。

  1. yum -y install gcc make pcre-devel zlib-devel openssl-devel
  2. #gcc 和 make是编译软件

想要了解make和make install:点击跳转

3,编译并安装nginx

  1. cd /usr/local/nginx-1.16.1/
  2. #cd到对应的解压目录
  3. ./configure --with-http_stub_status_module
  4. #编译时我只添加了这一个模块为例子,如需添加别的模块,请自行添加
  5. make && make install
  6. cd /usr/local/nginx/
  7. ./sbin/nginx
  8. #开启nginx服务
  9. ###验证
  10. curl localhost:80

Nginx模块:点击跳转

4,Nginx基础命令

  1. 验证配置是否正确: nginx -t
  2. 查看Nginx的详细的版本号:nginx -V
  3. 查看Nginx的简洁版本号:nginx -v
  4. 启动Nginxstart nginx
  5. 快速停止或关闭Nginxnginx -s stop
  6. 正常停止或关闭Nginxnginx -s quit
  7. 配置文件修改重装载命令:nginx -s reload

5,主配置文件解析

  1. main # 全局配置
  2. events { # 工作模式配置
  3. }
  4. http { # http设置
  5. ....
  6. server { # 服务器主机配置(虚拟主机、反向代理等)
  7. ....
  8. location { # 路由配置(虚拟目录等)
  9. ....
  10. }
  11. location path {
  12. ....
  13. }
  14. location otherpath {
  15. ....
  16. }
  17. }
  18. server {
  19. ....
  20. location {
  21. ....
  22. }
  23. }
  24. upstream name { # 负载均衡配置
  25. ....
  26. }
  27. }

main模块

  • user 用来指定nginx worker进程运行用户以及用户组,默认nobody账号运行
  • worker_processes 指定nginx要开启的子进程数量,运行过程中监控每个进程消耗内存(一般几M~几十M不等)根据实际情况进行调整,通常数量是CPU内核数量的整数倍
  • error_log 定义错误日志文件的位置及输出级别【debug / info / notice / warn / error / crit】
  • pid 用来指定进程id的存储文件的位置
  • worker_rlimit_nofile 用于指定一个进程可以打开最多文件数量的描述

event模块

  • worker_connections 指定最大可以同时接收的连接数量,这里一定要注意,最大连接数量是和worker processes共同决定的。
  • multi_accept 配置指定nginx在收到一个新连接通知后尽可能多的接受更多的连接
  • use epoll 配置指定了线程轮询的方法,如果是linux2.6+,使用epoll,如果是BSD如Mac请使用Kqueue

http模块

作为web服务器,http模块是nginx最核心的一个模块,配置项也是比较多的,项目中会设置到很多的实际业务场景,需要根据硬件信息进行适当的配置

其他模块信息请看文档:点击跳转