文章目录
- 1、nginx简介
- 2、介绍
- 3、安装nginx
- 4、常用命令
- 5、nginx配置文件
- 6、nginx访问文件方式
- 6.1、单目录访问
- 6.2、多目录访问
- 6.3、设置密码
- 6.4、nginx目录美化
- 7、nginx反向代理
- 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;
}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; ssl_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;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链接数多少合适: