Nginx的使用

一、Nginx基本的介绍

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

其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

Nginx默认端口号为80

二、Nginx实际应用场景

2.1、Windows环境快速入门

  1. 下载winDows安装包
  2. 解压当前目录
  3. 双击nginx.exe
  4. Nginx默认端口号为80

2.2、Nginx目录结构介绍

Conf 配置文件 (nginx核心配置文件 nginx.conf)
Contrib 存放一些实用工具
Docs 存放文档
Html 存放Html
Logs 存放日志文件
Temp 临时文件

2.3、基于Nginx存放Html静态资源

server {
    listen       80;
    server_name  localhost;
	#访问端口为80 location为/ 访问的html文件目录,找到index.html页面访问
    location / {
        root   html;
        index  index.html index.htm;
    }
}

2.3.1、反向代理与正向代理区别

  • 正向代理:
    比如访问一些国外的网站,需要通过vpn才可以访问这时候就可以使用正向代理可以隐藏用户真实行为;
  • 反向代理:
    客户端请求达到代理服务器 在通过代理服务器转发到真实服务器

正向代理与反向代理区别:
正向代理隐藏用户的真实行为、反向代理隐藏真实服务器

2.3.2、基于Nginx实现反向代理

C:\Windows\System32\drivers\etc host文件中新增

127.0.0.1  www.java521.com

注意:记得清理缓存

2.4、五种负载均衡策略

1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2、指定权重
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
3、IP绑定 ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
5、url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

2.4.1、服务集群带来的问题

分布式Session
分布式日志
分布式任务调度

2.4.2、配置负载均衡策略

Nginx负载均衡提供上游服务器(真实业务逻辑访问的服务器),负载均衡、故障转移、失败重试、容错、健康检查等。当上游服务器(真实业务逻辑访问的服务器)发生故障时,可以转移到其他上游服务器(真实业务逻辑访问的服务器)。

2.4.3、Upstream Server配置

upstream 主要配置如下:
IP地址和端口号:配置上游服务器的IP地址和端口
###定义上游服务器(需要被nginx真实代理访问的服务器) 默认是轮训机制

## 定义上游服务器(需要被nginx真实代理访问的服务器) 默认是轮训机制
upstream  backServer{
	#轮询
	server 127.0.0.1:8080;
	server 127.0.0.1:8081;
}

server {
	listen 80;
    server_name www.java521.com;

    location / {
	    ## 指定上游服务器负载均衡服务器
        proxy_pass http://backServer;
        index index.html index.htm;
    }
}

注意:负载均衡效果谷歌浏览器需要直接从浏览器中访问才可以生效

## 定义上游服务器(需要被nginx真实代理访问的服务器) 默认是轮训机制
upstream  backServer{
	#轮询
	server 127.0.0.1:8080;
	server 127.0.0.1:8081;
}

server {
	listen 80;
    server_name www.java521.com;

    location / {
	    ## 指定上游服务器负载均衡服务器
        proxy_pass http://backServer;
        index index.html index.htm;
    }
}

2.4.4、软负载与硬负载区别

软负载是基于服务器上安装的特定软件,比如Nginx实现负载均衡
硬负载均衡是基于固定的硬件实现负载均衡,比如F5

2.5、Linux环境Nginx安装

Linux环境Nginx安装:https://blog.csdn.net/qq_37242720/article/details/117988077

nginx.conf中root 、alias指令区别
alias是一个目录别名的定义,alias后面必须要用“/”结束,否则会找不到文件的
root则是最上层目录的定义。root后面"/"则可有可无

2.6、基于Nginx解决跨域问题

2.6.1、什么是网站跨域问题

页面中请求的ajax地址如果与页面请求地址域名和端口、协议不同的话,浏览器采用安全策略,请求能够正常到达服务器端,但是无法获取响应结果。

2.6.2、相关跨域错误信息

在这里插入图片描述

2.6.3、网站跨域问题解决方案

跨域问题解决方案

  1. B项目响应头设置允许跨域权限 response.setHeader(“Access-Control-Allow-Origin”, “*”); 适合于小公司
  2. 使用jsonp解决网站跨域问题 缺点:只能支持Get请求 模拟脚本提交。
  3. 使用Nginx搭建API网关保持域名和端口一致 Location
  4. 使用微服务中的Zuul网关
  5. HttpClient实现转发 缺点:重复发送两次请求

2.6.4、使用jsonp解决网站跨域问题

A项目ajax相关配置

<script type="text/javascript"
   src="./js/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
   $(document).ready(function() {
      $.ajax({
         type : "post",
         async : false,
         url : "http://127.0.0.1:8081/b/getBInfo?callback=",
         dataType : "jsonp",
         jsonp:"jsonpCallback",
         jsonpCallback:"callback",
         success : function(data) {
            alert(data["retMsg"]);
         },
         error : function(msg) {
            alert(msg.toString());
         }
      });
   });
</script>

B项目服务端

@RequestMapping("/getBInfo")
public void getBInfo(HttpServletResponse response, String jsonpCallback)
        throws IOException {
    response.setCharacterEncoding("utf-8");
    response.setContentType("text/html;charset=utf-8");
    JSONObject result = new JSONObject();
    result.put("retCode", "200");
    result.put("retMsg", "登陆成功");
    PrintWriter writer = response.getWriter();
    writer.println(jsonpCallback + "(" + result.toJSONString() + ")");
    writer.close();
}

使用Nginx搭建API网关保持域名和端口一致

location /b {
	proxy_pass   http://192.168.18.190:8081/;
    index  index.html index.htm;
}

location /a {
    proxy_pass   http://192.168.18.190:8080/;
    index  index.html index.htm;
}

A项目访问 http://127.0.0.1:8081/a/aIndexJsp

2.7、Nginx Location指令详解

通过指定模式来与客户端请求的URI相匹配,
基本语法如下:location [=||*|^~|@] pattern{……}

~    #区分大小写的正则匹配
~*   #不区分大小写的正则匹配
^~   #普通字符匹配,如果此选项匹配成功,忽略其他匹配选项,一般用来匹配目录
=    #普通字符精确匹配

2.7.1、location ~* 不区分大小

location ~* /b/ {
}
http://127.0.0.1:8081/b/getBInfo
http://127.0.0.1:8081/B/getBInfo

可能会如下错误:

ginx: [emerg] "proxy_pass" cannot have URI part in location given by regular expression, or inside named location, or inside "if" statement, or inside "limit_except" block in

将 proxy_pass http://192.168.18.190:8081/; 变为http://192.168.18.190:8081

后端接口需要新增

@RequestMapping(value = {"/b/getBInfo","/B/getBInfo"})

location ~ 区分大小写

2.7.2、location ~* /b/ { 区分大小写

正确访问
http://127.0.0.1:8081/b/getBInfo
错误访问
http://127.0.0.1:8081/B/getBInfo

2.7.3、Location ^~ 区分大小写

正确访问:
http:/127.0.0.1:8081/b/java521/getBInfo
http://127.0.0.1:8081/b/getBInfo

后端接口新增

@RequestMapping(value = {"/b/getBInfo","/B/getBInfo","/b/java521/getBInfo"})

2.7.4、location = 精确访问

正确访问 http://127.0.0.1:8081/b/
错误访问 http://127.0.0.1:8081/b/java521

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值