不容错过的Nginx配置详解,一文带你搞懂Nginx

不容错过的Nginx配置详解,一文带你搞懂Nginx,第1张

Nginx是一个高性能的HTTP和反向代理服务器,特点是占用内存少,并发能力强,事实上Nginx的并发能力确实在同类型的网页服务器中表现好。Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验,有报告表明能支持高达50000个并发连接数。

需要客户自己在浏览器配置代理服务器地址。

例如:在大陆访问www.google.com,我们需要一个代理服务器,我们通过代理服务器去访问谷歌,这个过程就是正向代理。

反向代理,客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。

单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们说的负载均衡。

为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。

进入到下面的目录,然后使用命令

配置文件所在位置:/usr/local/nginx/conf/nginx.conf

由全局块+events块+http块组成

从配置文件开始到events之间的内容,主要会设置一些影响Nginx服务器整体运行的配置指令,主要包括配置运行Nginx服务器的用户(组)、允许生成的worker process数,进程pid存放路径、日志存放路径和类型以及配置文件的引入等。

events块设计的指令主要影响Nginx服务器与用户的网络连接,常用的设置包括是否开启对多work process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个work process可以同时支持的最大连接数等。下面的例子表示每个work process支持的最大连接数为1024。这部分配置对Nginx的性能影响较大,在实际中应该灵活配置。

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

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

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

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

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

最常见的配置时本虚拟主机的监听配置和本虚拟主机的名称或IP配置。

一个server块可以配置多个location块。

这块的主要作用是基于Nginx服务器接收到的请求字符串(例如server_name/uri-string),对虚拟主机名称(也可以是IP别名)之外的字符串(例如前面的/uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。

访问http://ip,访问到的是Tomcat的主页面http://ip:8080。

Nginx+JDK8+Tomcat

访问:http://192.168.71.167/,看到的是Tomcat的首页。

根据访问的路径跳转到不同的服务器中去。

访问http://ip:9001/edu 直接跳到http://127.0.0.1:8080/edu

访问http://ip:9001/vod 直接跳到http://127.0.0.1:9090/vod

Nginx+JDK8+配置两个Tomcat,Tomcat的配置不再讲述。

访问http://192.168.71.167:9001/edu/a.html跳到了http://127.0.0.1:8080/edu/a.html页面。

访问http://192.168.71.167:9001/vod/a.html跳到了http://127.0.0.1:9090/vod/a.html页面。

假如Nginx代理服务器Server的配置为:192.168.71.167:9001,跳到:127.0.0.1:8080,访问者的IP为:192.168.71.200:20604。

通过访问http://192.168.71.167/edu/a.html,实现负载均衡的效果,平均分摊到8080和8081端口中。

Nginx+JDK8+2台Tomcat,一台8080,一台8081。

访问:http://192.168.71.167/edu/a.html,8080和8081交替访问。

1 轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

2 weight

weight代表权重,默认为1,权重越高被分配的客户端越多。

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

3 ip_hash

每个请求按访问IP的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题,示例如下:

4 fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

访问图片:http://192.168.71.167/image/1.jpg

访问页面:http://192.168.71.167/www/a.html

访问目录:http://192.168.71.167/image/(因为设置了autoindex on)

两台机器,每台机器都装有keepalived+Nginx+Tomcat。

主备keepalived服务器中只有master一台机器会出现VIP地址,否则会出现脑裂问题。

【提示】脚本要加+x的执行权限:chmod +x chk_nginx.sh

在Nginx里把虚拟IP配置进去即可。

一个Nginx是由一个master进程和多个worker进程组成的。

客户端发送请求到Master,然后给worker,再由这些work争抢处理这个请求。

1 可以使用nginx -s reload进行热部署方式;

2 每个worker是独立的进程,如果有其中的一个worker出现了问题,其他worker独立的继续进行争抢,实现请求的过程,不会造成服务的中断;

Nginx和Redis类似,都采用了io多路复用机制。每个worker进程都可以把CPU发挥到极致,一般来说worker数和服务器的CPU数相等是最为适宜的。

发送请求:访问静态资源占用2个连接,反向代理占用4个连接。

【温馨提示】

Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以作为反向代理进行负载均衡的实现。

1、全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。

2、events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。

3、http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。

4、server块:配置虚拟主机的相关参数,一个http中可以有多个server。

5、location块:配置请求的路由,以及各种页面的处理情况。

6、缓存控制字段cache-control的配置说明 ( https://www.cnblogs.com/kevingrace/p/10459429.html )

HTTP协议的Cache -Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置 Cache-Control并不会影响另一个消息处理过程中的缓存处理过程。

请求时的缓存指令包括: no-cache、no-store、max-age、 max-stale、min-fresh、only-if-cached等。

响应消息中的指令包括: public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age。

no-cache: 数据内容不能被缓存, 每次请求都重新访问服务器, 若有max-age, 则缓存期间不访问服务器.

no-store: 不仅不能缓存, 连暂存也不可以(即: 临时文件夹中不能暂存该资源).

private(默认): 只能在浏览器中缓存, 只有在第一次请求的时候才访问服务器, 若有max-age, 则缓存期间不访问服务器.

public: 可以被任何缓存区缓存, 如: 浏览器、服务器、代理服务器等.

max-age: 相对过期时间, 即以秒为单位的缓存时间.

no-cache, private: 打开新窗口时候重新访问服务器, 若设置max-age, 则缓存期间不访问服务器.

设置以分钟为单位的绝对过期时间, 优先级比Cache-Control低, 同时设置Expires和Cache-Control则后者生效. 也就是说要注意一点: Cache-Control的优先级高于Expires

expires起到控制页面缓存的作用,合理配置expires可以减少很多服务器的请求, expires的配置可以在http段中或者server段中或者location段中. 比如控制图片等过期时间为30天

客户端必须设置正向代理服务器,当然前提是要知道正向代理服务器的IP地址,还有代理程序的端口。

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

正向代理的用途:

(1)访问原来无法访问的资源,如Google

(2) 可以做缓存,加速访问资源

(3)对客户端访问授权,上网进行认证

(4)代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息

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

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

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

反向代理的作用:

(1)保证内网的安全,通常将反向代理作为公网访问地址,Web服务器是内网

(2)负载均衡,通过反向代理服务器来优化网站的负载

Nginx多文件配置二级子域名(推荐)

首先,在自己的域名控制台中添加解析,这里以添加blog前缀为例

我用的是万网,在 解析设置 中 添加解析

主机记录 :你想要的二级域名 

记录值 :你的IP地址

保存后,我们就完成了第一步把子域名解析到我们的服务器上。

第二步:添加配置文件

进入nginx的 /conf 配置文件夹中,编辑 nginx.conf 文件

[root@iZ2844brz0xZ~]# cd /usr/local/nginx/conf/[root@iZ2844brz0xZ~]# vim nginx.conf

在 http 模块中添加如下语句

include/usr/local/nginx/conf/sites-enabled/*.conf

告诉这个配置文件要去包含 /sites-enabled 目录下的所有以 .conf 结尾的配置文件。:wq 保存。

此时,我们新建一个 /sites-enabled 文件夹,并在其中添加 blog.***.com.conf 文件

[root@iZ2844brz0xZconf]# mkdir sites-enabled[root@iZ2844brz0xZsites-enabled]# vim blog.***.com.conf

在文件中添加

server {listen80#监听端口server_name blog.***.com#绑定域名root /usr/local/nginx/html/blog/#网站根目录,建议使用绝对路径indexindex.phpindex.htmlindex.htm#默认文件#添加对php的解析location ~ \.php$ {        fastcgi_pass127.0.0.1:9000        fastcgi_indexindex.php        fastcgi_param  SCRIPT_FILENAME$document_root$fastcgi_script_name        include        /usr/local/nginx/conf/fastcgi_params    }#添加错误页面,利于搜索引擎收录以及良好的用户体验error_page404/404.html    location /404.html {        root /usr/local/nginx/html/    }    error_page500502503504/50x.html    location =/50x.html {

        root /usr/local/nginx/html/    }}

内容可自行添加

Nginx单文件配置二级子域名

在 nginx.conf 文件的 server 模块中添加以下语句

if($host~* (\b(?!www\b)\w+)\.\w+\.\w+ ) { set$subdomain/$1}location / { root html$subdomainindexindex.htmlindex.phpindex.htmindex}

即可解析到对应文件夹

最后,重启nginx即可

[root@iZ2844brz0xZsites-enabled]# /usr/local/nginx/sbin/nginx -s reload

来自:https://blog.csdn.net/LBinin/article/details/70188752


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/158183.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-22
下一篇2023-03-22

发表评论

登录后才能评论

评论列表(0条)

    保存