Nginx通关攻略(一)

简介: Nginx通关攻略(一)

1. Nginx简介

1.1 Nginx 概述

  • NGINX是一个免费、开源、高性能、轻量级的HTTP和反向代理服务器,也是一个电子邮件(IMAP/POP3)代理服务器,其特点是占有内存少,并发能力强。 Nginx 因为它的稳定性、丰富的模块库、灵活的配置和较低的资源消耗而闻名 。目前应该是几乎所有项目建设必备。
  • Nginx由内核和一系列模块组成,内核提供web服务的基本功能,如启用网络协议,创建运行环境,接收和分配客户端请求,处理模块之间的交互。Nginx的各种功能和操作都由模块来实现。Nginx的模块从结构上分为核心模块、基础模块和第三方模块。
    核心模块: HTTP模块、EVENT模块和MAIL模块
    基础模块: HTTP Access模块、HTTP FastCGI模块、HTTP Proxy模块和HTTP Rewrite模块
    第三方模块: HTTP Upstream Request Hash模块、Notice模块和HTTP Access Key模块及用户自己开发的模块
    这样的设计使Nginx方便开发和扩展,也正因此才使得Nginx功能如此强大。Nginx的模块默认编译进nginx中,如果需要增加或删除模块,需要重新编译Nginx,这一点不如Apache的动态加载模块方便。如果有需要动态加载模块,可以使用由淘宝网发起的web服务器Tengine,在nginx的基础上增加了很多高级特性,完全兼容Nginx,已被国内很多网站采用。
  • Nginx有很多扩展版本

1.2 Nginx 作为 web 服务器

Web服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务,常常以B/S(Browser/Server)方式提供服务。

  • 应用层使用HTTP协议。
  • HTML文档格式。
  • 浏览器统一资源定位器(URL)。

Nginx 可以作为静态页面的 web 服务器,同时还支持 CGI 协议的动态语言,比如 perl、php 等,但是不支持 java。Java 程序一般都通过与 Tomcat 配合完成。

作为一名Java猿帅,肯定要理解下Nginx和Tomcat的区别了:

Nginx、Apache和Tomcat

  • Nginx—— 由俄罗斯程序员Igor Sysoev所开发的轻量级、高并发HTTP服务器;
  • Apache HTTP Server Project,一个Apache基金会下的HTTP服务项目,和Nginx功能类似;
  • Apache Tomcat ,则是Apache基金会下的另外一个项目,是一个Application Server,更准确的说是一个
    servlet应用容器,与Apache HTTP Server和Nginx相比,Tomcat能够动态的生成资源并返回到客户端;

Apache HTTP Server和Nginx本身不支持生成动态页面,但它们可以通过其他模块来支持(例如通过Shell、PHP、Python脚本程序来动态生成内容);

一个 HTTP Server 关心的是 HTTP 协议层面的传输和访问控制,所以在 Apache/Nginx 上你可以看到代理、负载均衡等功能。客户端通过 HTTP Server 访问服务器上存储的资源(HTML 文件、图片文件等等)。通过 CGI 技术,也可以将处理过的内容通过 HTTP Server 分发,但是一个 HTTP Server 始终只是把服务器上的文件如实的通过 HTTP 协议传输给客户端。

而应用服务器,则是一个应用执行的容器。它首先需要支持开发语言的运行(对于 Tomcat 来说,就是 Java),保证应用能够在应用服务器上正常运行。其次,需要支持应用相关的规范,例如类库、安全方面的特性。对于 Tomcat 来说,就是需要提供 JSP/Sevlet 运行需要的标准类库、Interface 等。为了方便,应用服务器往往也会集成 HTTP Server 的功能,但是不如专业的 HTTP Server 那么强大,所以应用服务器往往是运行在 HTTP Server 的背后,执行应用,将动态的内容转化为静态的内容之后,通过 HTTP Server 分发到客户端。

1.3 正向代理

正向代理:如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访 问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。

正向代理“代理”的是客户端

比如你想去google看个“动作片”,可国内不允许呀,就需要找翻墙代理,这个就是所谓的”正向代理“。

image.png

1.4 反向代理 与 负载均衡

反向代理正好与正向代理相反,反向代理是指以代理服务器来接收Internet上的连接请求,然后将请求转发到内部网络上的服务器,并将服务器上得到的结果返回给客户端,此时代理服务器对外表现就是一个服务器,客户端对代理是无感知的。

反向代理“代理”的是服务端

再比如,你想本本分分的在“优酷”上看个“爱情片”,youku.com会把你的请求分发到存放片片的那台机器上,这个就是所谓的”反向代理“。


image.png

为什么使用反向代理

  • 保护和隐藏原始资源服务器
  • 加密和SSL加速
  • 通过缓存静态资源,加速Web请求
  • 实现负载均衡

负载均衡

TODO: 留一个负载均衡详细介绍传送门

地址重定向

Nginx 的Rewrite主要的功能就是实现URL重写

比如输入360.com 跳转到了360.cn,baidu.cn跳转到了baidu.com

1.5 动静分离

为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度,降低原来单个服务器的压力。 这里指的就是让动态程序(Java、PHP)去访问应用服务器,让缓存、图片、JS、CSS等去访问Nginx。

2. Nginx 安装

  1. 下载Nginx
wget http://nginx.org/download/nginx-1.16.1.tar.gz 
复制代码

安装需要编译的插件

  • 用于编译c、c++代码的GCC;
  • 用c语言编写的正则表达式函数库Pcre(使用rewrite模块);
  • 用于数据压缩的函式库的Zlib;
  • 安全套接字层密码库OpenSSL(启用SSL支持)
yum install gcc c++                                          
yum install -y pcre pcre-devel                          
yum install -y zlib zlib-devel                           
yum install -y openssl openssl-devel   
复制代码

解压、配置(Nginx支持各种配置选项,文末一一列出 Nginx配置选项 )、编译、安装nginx

tar -zxvf nginx-1.15.tar.gz cd nginx-1.16.1
cd nginx-1.16.1
./configure
make && sudo make install 
复制代码

启动、重启、关闭

cd /usr/local/nginx/ 
cd sbin
./nginx
#关闭命令 
./nginx -s stop
#重启,热部署
./nginx -s reload
#修改配置文件后也别嘚瑟,反正我会动不动就写错,检查修改的nginx.conf配置是否正确
./nginx -t
复制代码

image.png

  1. 验证(浏览器输入ip)


image.png

3. 配置文件

nginx.conf 配置文件主要分为三部分:全局块、events块、https块。

Nginx配置语法:

  • 配置文件由指令和指令块构成
  • 每条指令以分号(;)结尾,指令和参数间以空格符分隔
  • 指令块以大括号{}将多条指令组织在一起
  • include语句允许组合多个配置文件以提高可维护性
  • 使用 # 添加注释
  • 使用 $ 定义变量
  • 部分指令的参数支持正则表达式

3.1 全局块

全局配置部分用来配置对整个server都有效的参数。主要会设置一些影响 nginx 服务器整体运行的配置指令,主要包括配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以 及配置文件的引入等。 示例:

user nobody;
worker_processes  4;
error_log  /data/nginx/logs/error.log  notice; 
复制代码

3.2 events 块

events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。

events {
  #每个 work process 支持的最大连接数为 1024.
    worker_connections  1024;
}
复制代码

3.3 http 块

这算是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。 需要注意的是:http 块也可以包括 http 全局块、server 块。

3.3.1 http 全局块

http 全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。

http {
    include       mime.types;
    default_type  application/octet-stream;
  sendfile        on;
  keepalive_timeout  65;
复制代码


相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
5月前
|
负载均衡 监控 应用服务中间件
Nginx通关攻略(四)
Nginx通关攻略(四)
56 0
|
5月前
|
缓存 负载均衡 Java
Nginx通关攻略(三)
Nginx通关攻略(三)
29 1
|
5月前
|
缓存 应用服务中间件 nginx
Nginx通关攻略(二)
Nginx通关攻略(二)
38 0
|
1月前
|
运维 前端开发 应用服务中间件
LNMP详解(八)——Nginx动静分离实战配置
LNMP详解(八)——Nginx动静分离实战配置
29 0
|
1月前
|
前端开发 应用服务中间件 nginx
Nginx配置详解Docker部署Nginx使用Nginx部署vue前端项目
Nginx配置详解Docker部署Nginx使用Nginx部署vue前端项目
110 0
|
7天前
|
JavaScript 前端开发 应用服务中间件
angular引入包、路由权限配置、打包问题与nginx配置问题(简单部署)
angular引入包、路由权限配置、打包问题与nginx配置问题(简单部署)
14 0
|
1月前
|
负载均衡 应用服务中间件 API
Nginx配置文件详解Nginx负载均衡Nginx静态配置Nginx反向代理
Nginx配置文件详解Nginx负载均衡Nginx静态配置Nginx反向代理
43 4
|
7天前
|
前端开发 JavaScript 应用服务中间件
前端vue2、vue3去掉url路由“ # ”号——nginx配置(二)
前端vue2、vue3去掉url路由“ # ”号——nginx配置
30 0
|
4天前
|
缓存 负载均衡 应用服务中间件
Nginx缓存及HTTPS配置小记(上)
Nginx缓存及HTTPS配置小记
16 0
|
10天前
|
安全 应用服务中间件 网络安全
SSL原理、生成SSL密钥对、Nginx配置SSL
现在,你的Nginx虚拟主机应该已经配置了SSL,可以通过HTTPS安全访问。确保在生产环境中使用有效的SSL证书来保护通信的安全性。
24 0