`

nginx简单入门

 
阅读更多

转自:https://blog.csdn.net/nicky160330/article/details/81016040

 

Nginx概述

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/smtp服务。这篇文章主要介绍nginx作为http服务器、反向代理服务器以及反向代理负载均衡的使用。

 

安装启动nginx

linux安装nginx非常简单

 yum -y install nginx   # 安装 nginx
 yum remove nginx   #卸载nginx
//还有一种下载安装包自己安装的方式比较麻烦不采用

使用whereis nginx命令查找最后可以知道,nginx程序文件在/usr/sbin下,配置文件在/etc/nginx下,由于/usr/sbin属于PATH路径,因此

可以在任意目录输入命令nginx -c /etc/nginx/nginx.conf启动nginx服务

 

 nginx常用命令

nginx -s stop # 快速关闭Nginx,可能不保存相关信息,并迅速终止web服务。
nginx -s quit #平稳关闭Nginx,保存相关信息,有安排的结束web服务。
nginx -s reload #因改变了Nginx相关配置,需要重新加载配置而重载。
nginx -s reopen #重新打开日志文件。
nginx -c filename #为 Nginx 指定一个配置文件,来代替缺省的。
nginx -t #不运行,而仅仅测试配置文件。nginx 将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件。
nginx -v #显示 nginx 的版本。
nginx -V #显示 nginx 的版本,编译器版本和配置参数。

 

而在windows环境下,直接在http://nginx.org/en/download.html下载nginx压缩包,直接解压就行。我解压在E盘根目录下文件夹是nginx-1.17.0,可以看到该目录下有nginx.exe可执行文件,直接双击或者在cmd中执行nginx命令都行。默认配置文件时conf文件夹下的nginx.conf文件

 

nginx作为普通HttpServer

简单来说,任何可以通过Http请求的方式访问IO资源(文件是对磁盘IO的一种抽象)服务都可以称为HttpServer。你可以自己写一个程序监听一个端口,当使用浏览器输入ip:port/path 访问,程序获取浏览器获取到Http请求报文,然后对URI部分(也就是path部分)进行解析,在本地文件系统或者其他IO资源中找到对应的资源,通过封装一个Http响应报文,将资源内容放入响应体中写回给浏览器,浏览器就会对其进行解析并展示(或者下载),这就完成了最简单的Http服务器。但我们平时应用的Http服务器需要处理的细节是很多的,如IO复用,安全性等,在此不再赘述

 

这里使用192.168.2.4上的nginx做为例子,首先备份/usr/local/nginx下的nginx.conf文件。然后清空nginx.conf,并写上如下内容:

worker_processes  1;
events {
    worker_connections  1024;
}
http {
	server {
            listen 80;
            location / {
               #下面这个if语句意思是,访问如下后缀名的文件时,只下载文件,不自动打开
	       if ($request_filename ~* ^.*?\.(txt|doc|pdf|rar|gz|zip|docx|exe|xlsx|ppt|pptx)$){ 
		 add_header Content-Disposition attachment;
    	       }
               root   html;
               index  index.html index.htm;
            }
	}
}

 nginx安装目录/usr/local/nginx下有一个html目录,该目录有有一个index.html文件,上面配置文件的意思是,访问192.168.2.4服务器80端口的http请求,根目录访问在/usr/local/nginx/html中查找请求内容,默认返回index.html或 index.htm

在本地浏览器输入192.168.2.4地址即能看到html目录下的index.html页面

注意:这里有个细节, Windows下的路径D:/nginx-1.14.0/www 在Nginx的配置文件中要写为正斜线/事实上从Windows资源管理器中直接复制路径为D:\nginx-1.14.0\www,分隔符为反斜线在某些情况下也是可以的,但是这里出现的\n连在一次会被nginx认为是一个换行符,从而请求会出现服务器500错误,所以这里推荐所有的分隔符都使用正斜线/,在Linux上由于路径分隔符本身就是/,因此不存在此问题 

 

nginx配置文件

前面我们已经对Nginx进行了简单配置并成功的访问,这里对Nginx的配置文件进行简单介绍,nginx的配置文件中配置项有两种结构

1.简单指令(simple directive),形如key value;

2.块指令(block directive), 形如key {simple_key simple_value;} 块指令中包含有简单指令。

 

worker_processes  1;
events {
    worker_connections  1024;
}

 

worker_processes 为工作进程的数量,这里如果不填的话默认为CPU核心数,事实上数量为CPU核心数也是最优配置,因为此时,理论上操作系统发生进程切换的的代价最小。 

events.worker_connections 每个工作进程的最大连接数,events有很多复杂的配置

http {
    server {
        location / {
            root  html;
            index index.html;
        }
    }
}

这一部分算是映射的主体了,整体包含在一个块级指令http {}中,server{}内有location / {}项,nginx会根据location后面的路径和ip:port/path中的path做匹配,如果匹配到,则从里面配置的/usr/local/nginx/html目录下寻找请求的资源。

 

注意:一个server{} 下也可以有多个location配置,而且location配置也可以跟正则表达式,如下:

server {
    location / {
        root html;
    }
    location /static/ {
        root static;
    }
    location ~ \.(gif|jpg|png)$ {
        root images;
    }
}

nginx的匹配优先级为=,^~,正则,长路径,短路径。详细可以看《nginx配置文件》

 

nginx作为反向代理服务器

这里将前面配置好的nginx监听80端口的静态文件服务器作为目标WebServer,首先在配置文件的http{}块中追加以下内容

server {
	listen 8089;
	location / {
		proxy_pass http://localhost:80;
	}
}

 然后使用nginx -s reload命令重新加载配置文件,再在本地浏览器输入192.168.2.4:8090,获得同上面看到一样的index.html页面

 

这里对上面的配置进行简单解释:

server{listen 8089;}表明启动一个http-server监听在8089端口(注:此项不填则默认为80端口,但前面的静态服务器就是使用80端口,此处就为其他端口)。 

location / {proxy_pass http://localhost:80;} location的匹配规则前文已经讲过,这里当匹配上location /之后,就会重新请求proxy_pass的URL,然后在将结果返回给浏览器。此时的192.168.2.4:8090请求相当于在请求192.168.2.4:80

 

正向代理和反向代理

正向代理

在如今的网络环境下,有些国外的网站我们是不能直接访问的,有些人则选择F_Q,就是找到一个可以访问国外网站的代理服务器,我们将请求发送给代理服务器,代理服务器去访问国外的网站,然后将访问到的数据传递给我们。

上述这样的代理模式称为正向代理,正向代理最大的特点是客户端非常明确要访问的服务器地址;服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端;正向代理模式屏蔽或者隐藏了真实客户端信息。

总结来说:正向代理,"它代理的是客户端,代客户端发出请求",是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。

正向代理的用途:
(1)访问原来无法访问的资源,如Google
(2) 可以做缓存,加速访问资源
(3)对客户端访问授权,上网进行认证
(4)代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息

反向代理

当访问量比较大的时候一般服务都会采用分布式部署;也就是通过部署多台服务器来解决高并发的问题;淘宝中大部分功能是通过Tengine(就是在nginx基础上做功能强化)进行反向代理实现的。

具体逻辑就是,多个客户端给服务器发送的请求,Nginx服务器接收到之后,按照一定的规则分发给了后端的不同业务处理服务器进行处理了。此时请求来源也就是客户端是明确的,但是请求具体由哪台服务器处理的并不明确了,Nginx扮演的就是一个反向代理角色。

客户端是无感知代理的存在的,反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。因为客户端不需要任何配置就可以访问。

反向代理,"它代理的是服务端,代服务端接收请求",主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息。

反向代理的作用:
(1)保证内网的安全,通常将反向代理作为公网访问地址,Web服务器是内网
(2)负载均衡,通过反向代理服务器来优化网站的负载

 

nginx作为反向代理服务器进行负载均衡

首先在192.168.2.4的docker中启动两个tomcat容器并分别配置8081和8082端口

然后在配置文件的http{}块中追加以下内容

upstream balance-server {
	server localhost:8081 weight=2;
	server localhost:8082 weight=3;
}	
server {
	listen 9090;
	location / {
		proxy_pass http://balance-server;
	}
}

 使用nginx -s reload命令重新加载配置文件,然后在本地访问192.168.2.4:8080就能看到经典的tomcat首页,当然这个首页是哪个tomcat容器做出的响应我们并不知道。上面的upstream就是对要进行负载均衡的几个被代理服务进行配置。weight值后面会介绍

注意:tomcat 8.5.31版本开始不支持 域名带下划线 "_",这时候如果upstream后面配置的名字包含下划线,则访问报错。也可以在新增的server的location里添加一行proxy_set_header Host $host;也能解决这个问题

 

负载均衡

什么是负载量?上面说的客户端发送的、nginx反向代理服务器接收到的请求数量,就是我们说的负载量

 什么又是均衡呢?请求数量按照一定的规则进行分发到不同的服务器处理的规则,就是一种均衡规则

所以负载均衡就是:将服务器接收到的请求按照规则分发的过程

 负载均衡在实际项目操作过程中,有硬件负载均衡和软件负载均衡两种硬件负载均衡也称为硬负载,特点:造价昂贵成本较高,数据的稳定性安全性好。更多的公司考虑到成本原因,会选择使用软件负载均衡,软件负载均衡是利用现有的技术结合主机硬件实现的一种消息队列分发机制。

nginx支持的负载均衡调度算法方式如下:

weight轮询(默认):接收到的请求按照顺序逐一分配到不同的后端服务器,即使在使用过程中,某一台后端服务器宕机,nginx会自动
将该服务器剔除出队列,请求受理情况不会受到任何影响。 这种方式下,可以给不同的后端服务器设置一个权重值(weight),用于调
整不同的服务器上请求的分配率;权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器硬
件配置进行调整的。

ip_hash:每个请求按照发起客户端的ip的hash结果进行匹配,这样的算法下一个固定ip地址的客户端总会访问到同一个后端服务器,这
也在一定程度上解决了集群部署环境下session共享的问题。

fair:智能调整调度算法,动态的根据后端服务器的请求处理到响应的时间进行均衡分配,响应时间短处理效率高的服务器分配到请求的
概率高,响应时间长处理效率低的服务器分配到的请求少;结合了前两者的优点的一种调度算法。但是需要注意的是nginx默认不支持fair
算法,如果要使用这种调度算法,请安装upstream_fair模块

 url_hash:按照访问的url的hash结果分配请求,每个请求的url会指向后端固定的某个服务器,可以在nginx作为静态服务器的情况下提
高缓存效率。同样要注意nginx默认不支持这种调度算法,要使用的话需要安装nginx的hash软件包

 

 

分享到:
评论

相关推荐

    Nginx 从入门到实践.docx

    "Nginx 从入门到实践" 本文将从基本概念开始,详细介绍 Nginx 的安装、配置和使用,旨在帮助读者快速掌握 Nginx 的基础知识和实践经验。 Nginx 介绍 Nginx 是一个开源、高性能、高可靠的 Web 和反向代理服务器,...

    Nginx 快速入门

    ### Nginx 快速入门知识点详解 #### 一、Nginx简介 Nginx是一款高性能的HTTP和反向代理Web服务器软件,由俄罗斯程序员Igor Sysoev开发。它以其高性能、稳定性、丰富的功能集、简单的配置文件以及低资源消耗而闻名...

    Nginx从入门到精通.pdf

    ### Nginx从入门到精通 #### 一、Nginx简介 Nginx是一款由俄罗斯程序员Igor Sysoev开发的高度轻量级HTTP服务器,它不仅具备高性能的HTTP服务功能,同时也支持反向代理、负载均衡以及IMAP/POP3/SMTP代理等功能。...

    Nginx从入门到实战培训.pdf(pdf格式ppt)

    YUM安装操作简单且不易出错,但安装文件会被分散到系统的不同位置。源码安装则将所有文件存放在同一个目录下,便于管理,但需要先下载源码再自行编译安装。源码安装需要安装一些依赖包,如gcc、gcc-c++、zlib、...

    Nginx模块开发入门

    ### Nginx模块开发入门详解 #### Nginx概述与市场地位 Nginx作为一款高性能的HTTP服务器和反向代理服务器,在全球范围内享有极高的声誉。根据权威机构W3Techs的数据,截至某一时间点,全球排名前100万的网站中,...

    Nginx开发从入门到精通

    Nginx的模块化设计使得功能扩展变得简单灵活。 在实际应用中,Nginx的安全配置同样重要。通过设置`limit_conn`和`limit_req`模块,可以限制IP地址的并发连接数和请求速率,防止DDoS攻击。另外,配置SSL/TLS证书可...

    Nginx快速入门1

    Nginx快速入门1 Nginx是当前最流行的Web服务器之一,具有轻量级、反向代理、电子邮件代理服务器等多种功能。本文将对Nginx进行详细介绍,包括什么是Nginx、反向代理、安装与使用、基本命令、配置实战等。 什么是...

    Nginx从入门到精通

    ### Nginx从入门到精通知识点总结 #### 一、Nginx概述 - **Nginx历史**:Nginx是由俄罗斯程序员Igor Sysoev在2004年开始开发的一款高性能HTTP和反向代理Web服务器软件。自发布以来,因其出色的性能表现和稳定性,...

    nginx从入门到精通

    ### Nginx从入门到精通:深入理解Nginx架构 #### 一、Nginx简介与架构概览 Nginx是一款广泛使用的高性能Web服务器和反向代理服务器,因其出色的稳定性、丰富的功能集、简单的配置文件以及低内存消耗等特点而受到...

    nginx入门案例

    ### Nginx 入门案例详解 #### 一、Nginx 反向代理与负载均衡简介 Nginx 是一款高性能的HTTP服务器和反向代理服务器,它以其稳定性、丰富的功能集、简单的配置文件和较低的内存消耗而闻名。在实际应用中,Nginx 常...

    Nginx服务器简单入门PPT

    Nginx 反向代理和负载均衡的ppt讲解

    nginx入门教程.pdf

    Nginx 入门教程 Nginx 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。它可以作为负载均衡服务器,支持 Rails 和 PHP 程序对外进行服务,也可以作为 HTTP 代理服务器对外进行服务。 ...

    Nginx教程从入门到精通到失业.pdf

    在本Nginx教程中,我们将从基础入门知识讲起,逐步深入到高级配置与优化,最终让读者能够精通并有效地使用Nginx。 首先是Nginx的安装过程,包括准备工作、实际安装、以及如何启动、关闭和重置服务。这部分内容主要...

Global site tag (gtag.js) - Google Analytics