Nginx反向代理

不使用spring cloud zuul 来实现代理

什么是Nginx

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。2011年6月1日,nginx 1.0.4发布。

其特点是占有内存少(1MB),并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。在全球活跃的网站中有12.18%的使用比率,大约为2220万个网站。

Nginx 是一个安装非常的简单、配置文件非常简洁(还能够支持perl语法)、Bug非常少的服务。Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够不间断服务的情况下进行软件版本的升级。

Nginx代码完全用C语言从头写成。官方数据测试表明能够支持高达 50,000 个并发连接数的响应。

Nginx的作用

Http代理,反向代理:作为web服务器最常用的功能之一,尤其是反向代理。

代理

正向代理

客户端 ---》代理 ---》访问地址--》 服务器

反向代理

客户端--》访问地址---》代理----》服务器

负载均衡

Nginx提供的负载均衡策略有2种:内置策略和扩展策略。内置策略为轮询,加权轮询,Ip hash。扩展策略,就天马行空,只有你想不到的没有他做不到的。

  • 轮询
  • 加权轮询

动静分离

动静分离,在我们的软件开发中,有些请求是需要后台处理的,有些请求是不需要经过后台处理的(如:css、html、jpg、js等等文件),这些不需要经过后台处理的文件称为静态文件。让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作。提高资源响应的速度。

目前,通过使用Nginx大大提高了我们网站的响应速度,优化了用户体验,让网站的健壮性更上一层楼!

在Win中使用Nginx

1、下载nginx

http://nginx.org/en/download.html 下载稳定版本。
以nginx/Windows-1.16.1为例,直接下载 nginx-1.16.1.zip。

2、启动nginx

有很多种方法启动nginx

(1)直接双击nginx.exe,双击后一个黑色的弹窗一闪而过

(2)打开cmd命令窗口,切换到nginx解压目录下,输入命令 nginx.exe ,回车即可

(3) 在config中打开nginx.conf 查看端口

http {
    include       mime.types;
    default_type  application/json;

    sendfile        on;
    
    keepalive_timeout  65;

    server {
        listen       8080;  # 监听端口
        server_name  localhost;
        # 指定前端项目所在的位置
        location / {
            root   html/hmdp;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

3、检查nginx是否启动成功

直接在浏览器地址栏输入网址 http://localhost:8080 回车,出现页面提示说明启动成功

4、配置监听

nginx的配置文件是conf目录下的nginx.conf,默认配置的nginx监听的端口为80,如果80端口被占用可以修改为未被占用的端口即可

当我们修改了nginx的配置文件nginx.conf 时,不需要关闭nginx后重新启动nginx,只需要执行命令 nginx -s reload 即可让改动生效

5、关闭nginx

如果使用cmd命令窗口启动nginx, 关闭cmd窗口是不能结束nginx进程的,可使用两种方法关闭nginx

(1)输入nginx命令 nginx -s stop(快速停止nginx) 或 nginx -s quit(完整有序的停止nginx)

(2)使用taskkill taskkill /f /t /im nginx.exe

taskkill是用来终止进程的,

/f是强制终止 .

/t终止指定的进程和任何由此启动的子进程。

/im示指定的进程名称 .

2、linux下安装

Nginx常用命令

cd /usr/local/nginx/sbin/

./nginx  启动

./nginx -s stop  停止

./nginx -s quit  安全退出

./nginx -s reload  重新加载配置文件

ps aux|grep nginx  查看nginx进程
# 开启

service firewalld start

# 重启

service firewalld restart

# 关闭

service firewalld stop

# 查看防火墙规则

firewall-cmd --list-all

# 查询端口是否开放

firewall-cmd --query-port=8080/tcp

# 开放80端口

firewall-cmd --permanent --add-port=80/tcp

# 移除端口

firewall-cmd --permanent --remove-port=8080/tcp



#重启防火墙(修改配置后要重启防火墙)

firewall-cmd --reload



# 参数解释

1、firwall-cmd:是Linux提供的操作firewall的一个工具;

2、--permanent:表示设置为持久;

3、--add-port:标识添加的端口;
-add-port=80/tcp

# 移除端口

firewall-cmd --permanent --remove-port=8080/tcp



#重启防火墙(修改配置后要重启防火墙)

firewall-cmd --reload



# 参数解释

1、firwall-cmd:是Linux提供的操作firewall的一个工具;

2、--permanent:表示设置为持久;

3、--add-port:标识添加的端口;

nginx.conf配置说明

# user nobody;
worker_processes  1;
# error_log logs/error.log;
### 	全局配置


events {
    worker_connections  1024; # 最大的连接数
}


http { 
	# 全局配置	
    include       mime.types;
    default_type  application/json;

    sendfile        on;
    
    keepalive_timeout  65;

	# 多个server监听
    server {
        listen       8080;  # http的默认端口
        server_name  localhost;
        # 指定前端项目所在的位置
        location / {  # 访问页面路径
            root   html/hmdp;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {  # 访问报错页面
            root   html;
        }


        location /api {  # 访问服务器后台
            default_type  application/json;
            #internal;  
            keepalive_timeout   30s;  
            keepalive_requests  1000;  
            #支持keep-alive  
            proxy_http_version 1.1;  
            rewrite /api(/.*) $1 break;  
            proxy_pass_request_headers on;
            #more_clear_input_headers Accept-Encoding;  
            proxy_next_upstream error timeout;  
            proxy_pass http://127.0.0.1:8081;
            #proxy_pass http://backend;
        }
    }

	# 负载均衡配置
    upstream backend {
        server 127.0.0.1:8081 max_fails=5 fail_timeout=10s weight=1;
        #server 127.0.0.1:8082 max_fails=5 fail_timeout=10s weight=1;
    }  
}

简化

全局配置


events {
	worker_connections 1024;  # 最大连接数
}

http{
    # http配置
    upstream xx(任意定义 如 P){
        # 负载均衡配置
        # 设置负载均衡权重
        server 127.0.0.1:8080 weight=1;
        server 127.0.0.1:8081 weight=1;
    }
    
    # 多个端口访问
    server{
        listen 80; # 监听端口
        server_name localhost; 
        # 可以配置代理
        
        location /{ 访问80端口的 根路径
            //会进入到这里 
            # 代理
            proxy_pass htpp://P;    127.0.0.1:8081/login  # 将路径代理到 location:P/
        }
        location /admin{ 访问80端口的 根路径
            //会进入到这里  127.0.0.1:8081/admin;  # 将路径代理到 location:80/admin
        }
        
        
    }
    server{
        listen 443; # 监听端口
        server_name localhost; 
         # 可以配置代理
    }
}

代理内部端口调用(只代理一个地址)

worker_processes  1;#进程数为一 全局生效 不用额外操作

events {
    worker_connections  1024; #最大连接数 不用额外操作
}

http {
    include       mime.types; #文件扩展 不用额外操作
    default_type  application/octet-stream; #默认文件类型 不用额外操作
    
    sendfile        on; #允许sendfile方式传输文件  不用额外操作
    
    keepalive_timeout  65; #连接超时时间 网络状态不好 可适当增大 基本不用额外操作
    
    # !!!!! 重点配置
    server { # server服务块 可以理解为配置一个场景就需要一个server
    
        listen       80; #监听接口 也就是要访问80
        
        server_name  localhost; #监听IP地址 可以写成域名
        
        #!!!!超重点配置
        location / { # location指向块 可以理解为一个server可以指向多个地点
        	proxy_pass http://127.0.0.1:8090;   # 本地IP+服务端口
           
        }
        error_page   500 502 503 504  /50x.html; #错误页 不用额外操作
        location = /50x.html { #错误页 不用额外操作
            root   html; #错误页 不用额外操作
        }
       
    }

}

代理多个地址

server {
    listen 9001;  # 监听端口 9001
    server_name 192.168.17.129;  # 服务器 IP

    location /edu/ {
        proxy_pass http://127.0.0.1:8080;  # 将 /edu/ 路径映射到 8080 端口的 Tomcat
    }

    location /vod/ {
        proxy_pass http://127.0.0.1:8081;  # 将 /vod/ 路径映射到 8081 端口的 Tomcat
    }
}