大型互联网公司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有很多扩展版本
    • 开源版 nginx.org
    • 商业版 NGINX Plus
    • 淘宝网发起的Web服务器 Tengine
    • 基于Nginx和Lua的Web平台 OpenResty

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,则需要通过代理服务器来访问,这种代理服务就称为正向代理。

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

比如在家办公期间,需要连公司的 VPN 办公,这个就是所谓的”正向代理“。还有我们访问 google也是。

1.4 反向代理 与 负载均衡

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

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

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

为什么使用反向代理

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

负载均衡

地址重定向

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

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

1.5 动静分离

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


2. Nginx 安装

  1. 下载Nginxwget http://nginx.org/download/nginx-1.16.1.tar.gz
  2. 安装需要编译的插件yum install gcc c++ yum install -y pcre pcre-devel yum install -y zlib zlib-devel yum install -y openssl openssl-devel
  • 用于编译c、c++代码的GCC;
  • 用c语言编写的正则表达式函数库Pcre(使用rewrite模块);
  • 用于数据压缩的函式库的Zlib;
  • 安全套接字层密码库OpenSSL(启用SSL支持)
  • 解压、配置(Nginx支持各种配置选项,文末一一列出 Nginx配置选项 )、编译、安装nginxtar -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
  • 验证(浏览器输入ip)

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;

3.3.2 server 块

这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了 节省互联网服务器硬件成本。

每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。

而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。

  • 全局 server 块也被叫做“虚拟服务器”部分,它描述的是一组根据不同server_name指令逻辑分割的资源,这些虚拟服务器响应HTTP请求,因此都包含在http部分。最常见的配置是本虚拟机
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在无互联网的情况下安装Nginx添加SSL证书可以通过以下步骤完成。 首先,确认服务器上是否已安装了Nginx。如果没有安装,需要从其他可信源获取Nginx安装包并将其上传到服务器。 其次,需要获得SSL证书和私钥。这两个文件可以通过其他方式获取,比如使用CA机构签署的证书,或者自己创建自签名证书。 然后,将证书和私钥文件复制到服务器的合适位置,一般是在Nginx配置目录下的“/etc/nginx/”文件夹中。 接下来,打开Nginx配置文件,一般是在“/etc/nginx/nginx.conf”或“/etc/nginx/conf.d/”目录下。找到监听80端口的配置段,添加以下代码: ``` server { listen 443 ssl; server_name your_domain; ssl_certificate /path/to/ssl.crt; ssl_certificate_key /path/to/ssl.key; ... } ``` 其中,“your_domain”应替换为你的域名,而“/path/to/ssl.crt”和“/path/to/ssl.key”应替换为你复制证书和私钥文件的实际路径。 保存并关闭配置文件后,重新启动Nginx服务器,让新的配置生效。 最后,可以通过在浏览器中输入“https://your_domain”来测试SSL配置是否生效。如果一切正常,应该能够看到浏览器中显示安全已验证的标志,并且能够正常使用HTTPS协议访问网站。 总之,虽然没有互联网连接时可能无法直接下载安装包和证书,但仍然可以通过其他途径获取所需文件,并手动配置Nginx以启用SSL。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值