Nginx

Nginx-> 网络服务器

正向代理

正向代理

是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。

客户端必须要进行一些特别的设置才能使用正向代理。就像要访问google用代理去访问(用户知道要访问真正的服务器)

Nginx_第1张图片


nginx的反向代理

什么是反向代理

反向代理

指的是浏览器/客户端并不知道自己要访问具体哪台目标服务器,只知道去访问代理服务器 ,代理服务器再通过反向代理 +负载均衡实现请求分发到应用服务器的一种代理服务。

反向代理服务的特点是代理服务器 代理的对象是应用服务器,也就是对于浏览器/客户端 来说应用服务器是隐藏的。

Nginx_第2张图片


以租房为例解释正向代理和反向代理?

客户端 <一> 代理 <一>服务端

A租房人(客户端),B房产中介(代理),C真实房东(服务端)

1、正向代理

A租房人(客户端)想租C真实房东的房子,但不认识C真实房东(服务端)

B房产中介(代理)认识C真实房东(服务端),并且从C真实房东(服务端)租到了房

A租房人(客户端)通过B房产中介(代理)租到了C真实房东(服务端)的房

C真实房东(服务端)只知道房子租给了B房产中介(代理),并不知道A租房人(客户端)租了自己的房子

2、反向代理

A租房人(客户端)要租B房产中介(代理)的房

B房产中介(代理)从C真实房东(服务端)手里租了A租房人(客户端)想要租的房

A租房人(客户端)不知道这套房子真实房东是C真实房东(服务端)

C真实房东(服务端)不知道自己的房子被A租房人(客户端)租住

nginx安装

首先安装nginx安装环境

第一步

安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc:

命令:yum install gcc-c++

第二步

PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库。

命令:yum install -y pcre pcre-devel

第三步

zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库。

命令:yum install -y zlib zlib-devel

第四步

OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。

nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。

命令:yum install -y openssl openssl-devel

然后安装nginx

1、将安装包上传到/home,解压

命令:tar -zxvf nginx-1.8.1.tar.gz

2、自定义创建一个文件夹作为Nginx安装目录,这里在home下创建nginx文件夹;

命令:cd /home

命令:mkdir nginx

3、在解压的目录(nginx-1.8.1)下执行

先输入命令 : cd /home/nginx-1.8.1

再执行 命令 :./configure --prefix=/home/nginx

意思即配置安装环境,将会把Nginx安装到/home/nginx下

4,编译:在解压的文件夹(nginx-1.8.1)下先后执行make 和 make install 命令

先输入 make

然后输入 make install

5、然后进入nginx/sbin目录下

命令: cd /home/nginx/sbin

执行命令:./nginx 启动nginx

关闭防火墙

systemctl stop firewalld

或者打开端口

firewall-cmd --add-port=80/tcp --permanent (防火墙关闭了,不用做这个操作)

在浏览器输入对应的ip地址,不用加端口号,因为nginx默认是80端口,可以省略,就可以访问到nginx

Nginx_第3张图片

nginx常用指令

启动:

windows

直接点击Nginx目录下的nginx.exe 或者 cmd运行start nginx

linux

nginx目录下,sbin目录中,./nginx

关闭

nginx -s stop 或者 nginx -s quit

stop表示立即停止nginx,不保存相关信息

quit表示正常退出nginx,并保存相关信息

nginx -s stop 或者 nginx -s quit

nginx -s reload :修改配置后重新加载生效

nginx -s reopen :重新打开日志文件

nginx -t -c /path/to/nginx.conf 测试nginx配置文件是否正确

nginx -s reopen #重启Nginx

nginx -s reload #重新加载Nginx配置文件,然后以优雅的方式重启Nginx

nginx -s stop #强制停止Nginx服务

nginx -s quit #优雅地停止Nginx服务(即处理完所有请求后再停止服务)

nginx -t #检测配置文件是否有语法错误,然后退出

nginx -?,-h #打开帮助信息

nginx -v #显示版本信息并退出

nginx -V #显示版本和配置选项信息,然后退出

nginx -t #检测配置文件是否有语法错误,然后退出

nginx -T #检测配置文件是否有语法错误,转储并退出

nginx -q #在检测配置文件期间屏蔽非错误信息

nginx -p prefix #设置前缀路径(默认是:/usr/share/nginx/)

nginx -c filename #设置配置文件(默认是:/etc/nginx/nginx.conf)

nginx -g directives #设置配置文件外的全局指令

killall nginx #杀死所有nginx进程

nginx部署图片服务器

1,修改配置文件

Nginx默认使用端口是80,这里直接先把Nginx端口改为8090

命令:vi /home/nginx/conf/nginx.conf

Nginx_第4张图片

在42行位置,输入以下代码内容

location ~ .*\.(gif|jpg|jpeg|png)$ {  
            expires 24h;  
            root /home/images/;#指定图片存放路径  
            access_log /home/nginx/logs/images.log;#图片 日志路径  
            proxy_store on;  
            proxy_store_access user:rw group:rw all:rw;  
            proxy_temp_path         /home/images/;#代理临时路径
            proxy_redirect          off;  

            proxy_set_header        Host 127.0.0.1;  
            proxy_set_header        X-Real-IP $remote_addr;  
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;  
            client_max_body_size    10m;  
            client_body_buffer_size 1280k;  
            proxy_connect_timeout   900;  
            proxy_send_timeout      900;  
            proxy_read_timeout      900;  
            proxy_buffer_size       40k;  
            proxy_buffers           40 320k;  
            proxy_busy_buffers_size 640k;  
            proxy_temp_file_write_size 640k;  
            if ( !-e $request_filename)  
            {  
                 proxy_pass  http://127.0.0.1:8090;#代理访问地址,和上面的端口一致  
            }  
        }

2,重新加载nginx

修改了nginx配置文件后,得重重新启动一下nginx

切换目录 命令:cd /home/nginx/sbin

重新加载 命令:./nginx -s reload

3,在/home下,新建一个images目录

系统一般会自动创建,可以先用 ls /home看看有没有这个目录

没有就创建 : mkdir /home/images

4,上传几张图片到images中

Nginx_第5张图片

5,再次访问,加上上面新设置的端口号,将图片名称加在地址后面即可

Nginx_第6张图片

nginx实现反向代理

1,复制3个tomcat,分别是

Nginx_第7张图片

命令 : cd /home

复制命令 :

cp -r apache-tomcat-9.0.30 ./tomcat-8081

cp -r apache-tomcat-9.0.30 ./tomcat-8082

cp -r apache-tomcat-9.0.30 ./tomcat-8083

分别修改这几各tomcat对应的端口号

用工具找到位置 : /home/tomcat-8081/conf/server.xml

右击打开,修改端口

tomcat-8081

Nginx_第8张图片

tomcat-8082

Nginx_第9张图片

tomcat-8083

2,新建一个test.html,内容分别为对应端口号的内容显示

第1步:新建一个txt文本,在里面输入内容

这是tomcat-8081

然后保存

Nginx_第10张图片

第2步:把文档改名为 test.html

Nginx_第11张图片

第3步:将test.html这个文件拖到对应的三个tomcat中,拖到tomcat-8081/webapps/ROOT中,三个tomcat都拖一个文件

Nginx_第12张图片

第4步:将test.html的文件内容,分别改成和tomcat目录名称对应的值

Nginx_第13张图片

Nginx_第14张图片

Nginx_第15张图片

3,分别启动这3个tomcat,保证这3个tomcat都能访问

分别进入 3个tomcat的bin目录下,./startup.sh

cd /home/tomcat-8081/bin --> ./startup.sh

cd /home/tomcat-8082/bin --> ./startup.sh

cd /home/tomcat-8083/bin --> ./startup.sh

然后分别加上/test.html去访问对应的test页面

Nginx_第16张图片

Nginx_第17张图片

Nginx_第18张图片

4,配置nginx

在server的外面加上

Nginx_第19张图片

upstream tomcat1 {
 server 192.168.100.160:8081;
 server 192.168.100.160:8082;
 server 192.168.100.160:8083;
 }
#192.168.100.160  ->  http://tomcat1 -> http://192.168.100.160:8081
 server {
 listen 80;
 server_name localhost;
 location / {
 proxy_pass http://tomcat1;
 #配置默认访问页,这里就会访问到tomcat1里面的那个index.jsp文件里面
 index index.html;
 }
 }

加完后,保存退出,重新加载nginx

命令:cd /home/nginx/sbin

命令:./nginx -s reload

5,然后在浏览器中输入地址去访问

http://192.168.100.160/test.html

然后刷新访问地址,每次访问的时候都会随机出现不同的tomcat页面,这其实就完成了反向代理的使用

Nginx_第20张图片

6,然后我们还可以重新配置一下,当我们访问指定页面的时候,只有指定的服务器可以使用

upstream tomcat1 {

server 127.0.0.1:8081;

}

upstream tomcat2 {

server 127.0.0.1:8082;

server 127.0.0.1:8083;

}

server {

listen 80;

server_name localhost;

location /1 {

proxy_pass http://tomcat1;

index index.jsp;

}

location /test.html {

proxy_pass http://tomcat2;

index index.jsp;

}

}

这个时候再次访问对应的地址,发现只有8082和8083可以访问我们指定的页面

负载均衡

#反向代理+负载均衡

upstream reverseProxyServer{

#负载均衡应用服务器A: 权重为10,10s内连接请求失败2次,nginx在10s内认为server是不可用的,将不在发送请求给这台服务器

server 应用服务器A的IP:8080 weight=10 max_fails=2 fail_timeout=10s;

#负载均衡应用服务器B: 代理服务器权重为5,10s内连接请求失败2次,nginx在10s内认为server是不可用的,将不在发送请求给这台服务器

server 应用服务器B的IP:8080 weight=5 fail_timeout=10s max_fails=2;

#负载均衡应用服务器C: 代理服务器权重为5,10s内连接请求失败2次,nginx在10s内认为server是不可用的,将不在发送请求给这台服务器

server 应用服务器C的IP:8080 weight=5 fail_timeout=10s max_fails=2;

}

server {

#监听80端口,http默认端口80

listen 80;

#服务器IP或域名

server_name localhost;

#反向代理请求路径中含有/appname的所有请求到upstream定义的对应反向代理模块

location /appname {

proxy_pass http://reverseProxyServer;

}

}

负载均衡算法常用的有轮询权重ip_hash算法,默认是轮询算法~

(1)基于轮询的算法

原理是每一个请求按时间顺序逐一被分发到不同的应用服务器,如果接收请求的应用服务器挂了,并且请求超过最大失败次数max_fails(1次),则在失效时间fail_timeout(10秒)内不会再转发请求到该节点~

upstream defaultReverseProxyServer{

server 192.168.0.1:8080;

server 192.168.0.2:8080;

}

(2)基于权重的算法

原理是每一个请求按权重被分发到不同的应用服务器,同样,如果接收请求的应用服务器挂了,并且请求超过最大失败次数max_fails(默认1次或可设置N次),则在失效时间fail_timeout(默认10秒,可设置N秒)内,不会再转发请求到该节点~

upstream weightReverseProxyServer{

server 192.168.0.1:8080 weight=10 max_fails=2 fail_timeout=5s;

server 192.168.0.2:8080 weight=5 max_fails=2 fail_timeout=5s;

}

(3)基于ip_hash的算法

原理是每一个请求按用户访问IP的哈希结果分配,如果请求来自同一个用户IP则固定这台IP访问一台应用服务器,该算法可以有效解决动态网页中存在的session共享问题。

upstream ipHashReverseProxyServer{

ip_hash;

server 192.168.0.1:8080;

server 192.168.0.2:8080;

}

一般使用的是基于权重的算法,因为现在很多情况下都是集群部署,而且集群下的各个服务器资源大多都是不均匀的,资源高的则分配权重高一些,资源低的则分配权重低一些,这种情况使用基于权重的负载均衡算法,可以更高效的利用资源和提高并发处理能力~

你可能感兴趣的:(nginx,运维)