热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

深度剖析nginx

文章目录1、nginx简介2、介绍3、安装nginx4、常用命令5、nginx配置文件6、nginx访问文件方式6.1、单目录访问6.2、多目录访问6.3、设置密码6.4、ngin

文章目录

  • 1、nginx简介
  • 2、介绍
  • 3、安装nginx
  • 4、常用命令
  • 5、nginx配置文件
  • 6、nginx访问文件方式
    • 6.1、单目录访问
    • 6.2、多目录访问
    • 6.3、设置密码
    • 6.4、nginx目录美化
  • 7、nginx反向代理
    • 7.1、示例1
    • 7.2、示例2
  • 8、正向代理和反向代理
  • 9、location指令说明:
  • 10、负载均衡(也是反向代理的内容)
  • 11、动静分离
  • 12、nginx配置高可用的集群
  • 13、nginx原理


1、nginx简介

nginx是一个高效率的http和反向代理服务器。
占用内存少,并发能力强。

Nginx,可以作为静态页面的web服务器,同时还支持CGI协议的动态语言,比如perl、php等。但是不支持 java。Java程序只能通过与tomcat配合完成。Nginx,专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验,有报告表明能支持高达50,000个并发连接数。v


2、介绍

在说反向代理的时候,首先来说一下正向代理:
正向代理:
Nginx.不仅可以做反向代理,实现负载均衡。还能用作正向代理来进行上网等功能。
正向代理:如果把局域网外的 Internet想象成一个巨大的资源库,则局域网中的客户端要访问Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。
反向代理
反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。
负载均衡
单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡
动静分离
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。

3、安装nginx

离线安装:
nginx官网下载:http://nginx.org/
这里使用1.12.2版本:
在这里插入图片描述
安装想关依赖包:
在这里插入图片描述
安装依赖步骤:

wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz

解压:tar -xvf pcre-8.37.tar.gz
进行配置:cd pcre-8.37/ --> ./configure
编译、安装:make & & make install
查看是否安装成功:pcre-config --version
在这里插入图片描述
安装其他依赖:sudo apt install make libtool openssl zlib1g-dev
上述依赖文件安装完成之后就可以开始安装nginx了
解压上述nginx
配置:./configure
编译:make
安装:make install
安装完成之后,在/usr/local/nginx/sbin下面启动nginx
启动:./nginx
启动中遇见如下错误:error while loading shared libraries: libpcre.so.1
解决方法:
查看这两篇文章:
链接1
链接2
访问:浏览器输入ip地址可以看见,已经安装完成:
在这里插入图片描述

4、常用命令

查看nginx版本号:./nginx -V
启动nginx:./nginx
关闭nginx:sudo ./nginx -s stop
重新加载nginx:sudo ./nginx -s reload
帮助:./nginx -h

5、nginx配置文件

nginx配置文件在/usr/local/nginx/conf目录下:
其中:nginx.conf为nginx的配置文件
nginx中配置文件分为三块:
分为:
全局块:
worker_processes 1;等其他全局区的配置;

event块:


events {worker_connections 1024;
}

http块:

http {}

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

比如:
在这里插入图片描述
二、event块:

在这里插入图片描述
三、http块: 在server之外前面的部分
http块也可以包括:http全局快、server块
其中:
http全局块:包括文件引入、MIME-TYPE定义、日志自定义、链接超时时间、但链接请求数上限等。

server块又包含:全局server和location块
其中:全局server块:最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或IP配置。

6、nginx访问文件方式

6.1、单目录访问

建立要访问的文件的软链接到/usr/local/nginx/html目录
sudo ln -s ~/win file
因为nginx默认是不支持访问目录的,因此我们需要修改配置文件,让其支持访问:
打开配置文件:
vim nginx.conf
1、修改:user nobody;----> user root;
2、在http全局块中添加:autoindex on;
3、重新加载nginx: sudo ./nginx -s reload

在这里插入图片描述
此时即可正常浏览文件了。

6.2、多目录访问

在进行多目录访问的时候,我们需要将root /home/pi/disk/的root配置提到location的上面。如下:
在这里插入图片描述
这样就可以通过file和temp访问不同路径了。
如果不希望直接输入ip地址就能访问目录内容,需要将:autoindex on放入location块中。

6.3、设置密码

下载生成加密密码工具:
参考链接
注意:在ubuntu中不是安装httpd-tools而是安装sudo apt install apache2-utils
参考链接
然后起亚设置方式和上面参考链接一样。效果如下:
在这里插入图片描述
输入用户:cah和密码:123即可访问。
在这里插入图片描述

6.4、nginx目录美化

不二次编译。
参考链接
效果:
在这里插入图片描述
我的配置:

user root;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;events {worker_connections 20;# multi_accept on;
}http {sendfile on;tcp_nopush on;tcp_nodelay on;keepalive_timeout 65;types_hash_max_size 2048;server_tokens off;include /etc/nginx/mime.types;default_type application/octet-stream;ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLEssl_prefer_server_ciphers on;access_log /var/log/nginx/access.log;error_log /var/log/nginx/error.log;autoindex_exact_size off;autoindex_localtime on;charset utf-8;gzip on;server {listen 80;server_name 10.16.43.83;#autoindex on;root /home/pi/disk/;fancyindex on;location /+ {fancyindex_header "/../Nginx-Fancyindex-Theme/header.html";fancyindex_footer "/../Nginx-Fancyindex-Theme/footer.html";fancyindex_ignore "/../Nginx-Fancyindex-Theme/";}location /file/ {auth_basic "input password";auth_basic_user_file /etc/nginx/conf.d/password;}}}

二次编译:
参考链接

7、nginx反向代理

7.1、示例1

实现效果:打开浏览器,在浏览器地址栏输入地址:www.123.com,跳到linux系统中的tomcat主页面:
反向代理屏蔽了tomcat的Ip以及端口号,向外暴露的只是反向代理的端口号,提高了安全性;

1、准备工作:
在linux系统中安装tomcat,使用默认端口号8080
sudo apt-get install tomcat8

在这里插入图片描述
看到如下说明已经安装成功:

具体配置:
1、配置windows的host文件
在win中:C:\Windows\System32\drivers\etc的文件中,有一个hosts文件:
我们在里面加上一条规则:

192.168.1.165 www.123.com

在这里插入图片描述
在浏览器中输入www.123.com可以看到已经能访问nginx了:
在这里插入图片描述
2、修改配置文件:
在这里插入图片描述
这里的意思就是将访问本机的80端口的数据转发到127.0.0.1的8080端口去。这里其实有点像前向代理的。

此时在浏览器中输入www.123.com可以看到,已经可以访问tomcat了:
在这里插入图片描述

7.2、示例2

在这里插入图片描述
在这里插入图片描述

修改配置文件:
新建一个server,修改如下:
在这里插入图片描述
上述文件含义:
~ 是一个正则:意思就是当路径中含有edu就转发到8001端口,当路径中含有vod就转发到8002端口。

8、正向代理和反向代理

正向代理是客户端和其他所有服务器(重点:所有)的代理者,而反向代理是客户端和所要代理的服务器之间的代理。

正向代理就是客户端和服务器的代理者,反向代理就是客户端和所要代理的服务器之间的代理,中间跨越了以及服务器。

9、location指令说明:

在这里插入图片描述
在这里插入图片描述

10、负载均衡(也是反向代理的内容)

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

演示效果:
在这里插入图片描述
也就是在浏览器中输入端口地址,让他既到8080也到8081端口。

在这里插入图片描述
添加如下两个地方:
在这里插入图片描述
在这里插入图片描述
在不停刷新时,我们可以看到页面一会显示8080一会显示8081,这就表明负载被均分到了不同服务器上,实现了负载均衡。

负载均衡的方式:
轮询、权重(weight)
权重方式在进行nginx配置的时候可以指定权重:
在这里插入图片描述
权重越高,表示分配的几率越高。
在这里插入图片描述

11、动静分离

在这里插入图片描述
示例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
解释:
1:表示使用地址进行访问
2:表示路径中有www
3:表示根目录为/data/ :这里设置通过输入地址访问的目录,这是根目录,但是要注意的是,这里使用/data/是绝对路径,默认配置文件为html为相对路径
4: 表示路径中有image
5: 表示更目录为/data/
6: 表示列出目录

实现效果:
在这里插入图片描述
这里是所以为显示目录,是因为我们配置了autoindex
在这里插入图片描述

12、nginx配置高可用的集群

介绍:在某些情况下,nginx会宕机,一但nginx宕机了,那么肯定服务器也就请求不了了。为了解决nginx宕机的问题,需要配置nginx的高可用集群。
在这里插入图片描述

当主服务器宕机之后,自动转发到备份服务器。
在实现多个nginx的时候需要使用一个软件:keepalived
keepalived就相当于一个路由,当某个nginx宕机的时候,自动转发到另一个服务器中。但是因为这里有两个nginx,有两个ip地址,如何才能让其转发到一个ip上呢?为解决这个问题,keepalived会虚拟出来一个ip,但要清除,这个 ip实际是不存在,他只是一个虚拟IP.

前提:
在这里插入图片描述
准备工作:
在这里插入图片描述
在两台服务器上安装:keepalived
sudo apt-get install keepalived
查看安装成功:keepalived -v
在这里插入图片描述
切换到 /etc/keepalived目录,这时,里面还没有配置文件,我们需要手动创建:
sudo vim keepalived.conf
这时,我们在这个 keepalived.conf文件中复制下面这些内容

global_defs {router_id 192.168.223.131//你的ip地址
}
# 检测脚本配置
vrrp_script chk_http_port {script "/etc/keepalived/a.sh"interval 2 #(检测脚本执行的间隔)weight 2 # 设置当前服务器权重
}
# 虚拟ip配置
vrrp_instance VI_1 {state BACKUP # 备份服务器上将 MASTER 改为 BACKUPinterface ens33 //网卡,可以通过ifconfig查看virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同priority 90 # 主、备机取不同的优先级,主机值较大,备份机值较小advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.17.50 // VRRP H 虚拟地址}
}

注意:script “/etc/keepalived/a.sh”,这个地方是你的运行脚本的路径,以及运行脚本的文件名
根据script "/etc/keepalived/a.sh"这句话在/etc/keepalived下创建名为a.sh的运行脚本
sudo vim a.sh
在a.sh中复制以下内容进去

A=`ps -C nginx --no-header |wc -l` ## 查看是否有 nginx进程 把值赋给变量A
if [ $A -eq 0 ];then ## 如果没有进程值得为 零service keepalived stop ## 则结束 keepalived 进程
fi

给a.sh可执行权限
sudo chmod 777 a.sh

脚本文件还可以我如下:
在这里插入图片描述
启动两台服务器nginx和keepalived
启动nginx:./ngix
启动keepalived:systemctl start keepalived.service

查看启动状态:
ps -ef | grep keepalived
在这里插入图片描述
在这里插入图片描述
正常情况下应该也是可以访问:
在这里插入图片描述
可以看到依然可以访问。

13、nginx原理

当启动nginx的时候,会有两个进程:master和worker
在这里插入图片描述
worker如何进行工作:
在这里插入图片描述
master接收到消息,然后将任务分配给下面的worker,然后worker通过争抢机制去抢这个任务,然后将消息发送给tomcat

master只有一个,他是来管理worker的,但是worker有多个。

一个master和多个worker有什么好处?
1、可以使用:nginx -s reload 进行热部署。
2、
在这里插入图片描述
3、在这里插入图片描述
在这里插入图片描述
worker链接数多少合适:
在这里插入图片描述


推荐阅读
  • 编程语言是从哪蹦出来的——大型伦理寻根现场
    Hello,我是Alex007,一个热爱计算机编程和硬件设计的小白,为啥是007呢?因为叫Alex的人太多了,再加上每天007的生活,Alex007就诞生了。聊一聊编程到底是啥,怎 ... [详细]
  • 本文翻译自:WhatisaMavenartifact?什么是神器?为什么Maven需要它?#1楼参考:https:sta ... [详细]
  • socket.io是个基于node.js的快平台实时通讯框架。只用不到10行代码,就可以搭建一个简单的多人实时聊天室。先来看看运行后的效果:socket.io多人聊天室只要简单几 ... [详细]
  • PNG在IE6下透明问题的解决办法
    2019独角兽企业重金招聘Python工程师标准做Web开发的朋友一定都知道PNG是一个相当不错的图片格式,但是这个好的格式却在IE6时代造成了麻烦࿰ ... [详细]
  • 这篇文章将为大家详细讲解有关C#开发技巧有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。C#开发技 ... [详细]
  • Java开发框架!Alibaba高并发业务秒杀系统落地实战文档,砥砺前行!
    接口概述:接口是Java语言中的一种引用类型,是方法的集合,所以接口的内部主要就是定义方法,包含常量,抽象方法(JDK ... [详细]
  • 通过CreateDirectory命令创建相应的Directory之后,可以将目录的访问权限授予其他用户,这样其他用户就能通过外部表访问很多主机上的文件,而不需要登录到数据库服务器 ... [详细]
  • Java中的FileStoregetUsableSpace()方法,带示例 ... [详细]
  • Shiro 简单了解
    Shiro简单了解简单用过SpringSecurity安全框架后,再试试另一个安全框架——Shiro。1.Shiro简介ApacheShiro是一个强大且易用的Java安全框架:S ... [详细]
  • 问题说明最近看到Spring事务,在学习过程中遇到一个很苦恼问题搭建好Spring的启动环境后出现了一点小问题在启动时候却出现[java.lang.NullPointerExcep ... [详细]
  • pdf怎么把html变成pdf1 用AdobeAcroat8.1.2,打开网页后,页面右键菜单中会出现一个“转换为AobePDF的选项,点击就可以转换。 安装AdobeAcroba ... [详细]
  • 大家好,我们是慢雾安全团队。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
author-avatar
开在覀黎明前的小茉莉
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有