Nginx(防盗链,服务器宕机,跨域,防DDOS) nginx防盗链 nginx轮询宕机解决 nginx解决跨域问题 nginx防止DDOS攻击

nginx防盗链

概述

  对于图片,B网站,如果想使用A网站中的图片,可以直接写上A网站图片的链接地址,或者将A网站的图片通过右键另存为的方式下载到本地,然后在页面上使用。如果A网站不想让B网站这样干,那么A网站可以采取防盗链的措施,如果使用防盗链,B网站想请求A网站所有需要的资源,通过URL的方式,获取的可能不是原来的图片了,出现403或者被别的图片替代。如果想通过浏览器直接打开图片URL,那么仍然有可能显示403,这就是防盗链。

如下配置:

server {
                listen       80;
                server_name  fdl.wdksoft.com;

                #charset koi8-r;

                #access_log  logs/host.access.log  main;
                #拦截所有关于jpg|jpeg|JPG|png|gif|icon格式的请求
                location ~ .*\.(jpg|jpeg|JPG|png|gif|icon)$ {
                    #验证blocked来源地址不为空并且符合referers配置的地址
                    #none允许来源地址为空
                    valid_referers blocked http://fdl.wdksoft.com/a fdl.wdksoft.com/a;
                    #如果不符合则会return 403
                    if ($invalid_referer) {
                        rewrite ^/ http://www.a.com:8080/a/img/zysx.png;
                        #return 403;
                    }
                }
                location /a {
                    proxy_pass http://www.a.com:8080/a/;
                    index index.html index.htm;
                    
                }
                
            }

nginx轮询宕机解决

概述

  nginx应对高并发的手段采用集群方法,如果一个服务域名背后的某个服务器发生了宕机,而此时又恰好轮询到了该服务器,那么就会发生长时间的等待,直到浏览器多次尝试后轮询到没有宕机的服务器才能完成一个服务,大大降低了服务器的效率和用户体验度,即相当于宕机的服务器白白占用了几次轮询尝试时间;

如下配置:

upstream myserver{
        #ip_hash;
        server 127.0.0.1:8081;
        server 127.0.0.1:8082;
    }
    server{
        listen       81;
        server_name  www.bproject.com;
        location / {
            root   html;
            proxy_pass  http://myserver;
            index  index.html index.htm;
            proxy_connect_timeout 1;
            proxy_send_timeout 1;
            proxy_read_timeout 1;
        }
    }

nginx解决跨域问题

什么是跨域

  使用JS获取数据时,涉及到的两个URL只要协议,域名,端口有任何一个不同,都当做是不同的域,相互访问就会有跨域问题;

怎样使用nginx解决跨域问题

  步骤一:创建两个工程AProject,BProject

     

  步骤二:在A工程中创建servlet

 
package com.wn;

import com.alibaba.fastjson.JSON;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/aServlet")
public class AServlet extends HttpServlet {
    //resp.setContentType("text/html;charset=utf-8");
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req,resp);
    }

    //方法四:使用nginx解決跨域問題
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");
        System.out.println("数据:"+username);

        //响应
        resp.getWriter().write("success");
    }
}
 

  步骤三:在B工程中创建jsp页面

 
<%--
  Created by IntelliJ IDEA.
  User: wn
  Date: 2020/2/6
  Time: 10:04
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>跨域</title>
    <script type="text/javascript" src="js/jquery-1.8.3.min.js"></script>
    <script>
        //使用nginx解决跨域问题
        $(function () {
            $("#button").click(function () {
                var username=$("#username").val();
                $.ajax({
                    url:"http://www.123.com:81/a/aServlet?username="+username,
                    type:"GET",
                    success:function (result) {
                        alert(result)
                    },
                    error:function () {
                        alert("error!!!")
                    }
                })
            })
        })

    </script>
</head>
<body>
  <input type="text" name="username" id="username"/><button id="button" type="button">提交</button>
</body>
</html>
 

  步骤四:配置nginx.conf文件

 
server {
        listen       81;
        server_name  www.123.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }
        
        #nginx解决跨域问题
        location /a {
            proxy_pass http://www.aproject.com:8080/;
            index index.html index.htm;
                    
        }
        location /b {
            proxy_pass http://www.bproject.com:8081/;
            index index.html index.htm;
        }
}
 

nginx防止DDOS攻击

什么是DDOS攻击

  DDoS攻击是Distributed Denial of Service的缩写,翻译成中文就是分布式拒绝服务。即不法黑客组织通过控制服务器等资源,发动对包括国家骨干网络、重要网络设施、政企或个人网站在内的互联网上任一目标的攻击,致使目标服务器断网,最终停止提供服务。

攻击手段

  1.通过使网络过载来干扰甚至阻断正常的网络通讯;

  2.通过向服务器提交大量请求,使服务器超负荷;

  3.阻断某一用户访问服务器;

  3.阻断某服务与特定系统或个人的通讯;

如何应对DDOS攻击

  防止DDoS攻击有很多种方法,比如使用高防服务器、CDN加速、DDoS清洗等。但是由于经费的限制,我们整不起那些个高大上的玩意,所以只能在我们现有的材料上加工加工来达到应对DDoS攻击的目的。

nginx防止DDOS攻击

  配置nginx.conf文件

 
  #防止ddos攻击
    #限制IP的每秒请求次数
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
    #限制同一个IP同一时间内创建连接次数
    limit_conn_zone $binary_remote_addr zone=addr:10m;
    server {
        listen       81;
        server_name  www.ddos.com;

        location /a {
            limit_conn addr 1;        #同一时间内只能建立一次连接
            limit_req zone=one;
            proxy_pass http://www.aproject.com:8080/welcome.jsp;
            index index.html index.htm;
            
        }
    }
 

    $binary_remote_addr:二进制远程地址;

    zone=one:10m:定义zone名字叫one,并为这个zone分配了内存,用来存储会话(二进制远程地址),1m内存可以保存16000会话;

    rate=1r/s:限制频率为每秒1个请求;

    注:因为设置了1秒钟一个连接,如果一秒钟超过一个请求的话,就是报503状态码,如果一秒钟一个请求,就是正常访问。

 

概述

  对于图片,B网站,如果想使用A网站中的图片,可以直接写上A网站图片的链接地址,或者将A网站的图片通过右键另存为的方式下载到本地,然后在页面上使用。如果A网站不想让B网站这样干,那么A网站可以采取防盗链的措施,如果使用防盗链,B网站想请求A网站所有需要的资源,通过URL的方式,获取的可能不是原来的图片了,出现403或者被别的图片替代。如果想通过浏览器直接打开图片URL,那么仍然有可能显示403,这就是防盗链。

如下配置:

server {
                listen       80;
                server_name  fdl.wdksoft.com;

                #charset koi8-r;

                #access_log  logs/host.access.log  main;
                #拦截所有关于jpg|jpeg|JPG|png|gif|icon格式的请求
                location ~ .*\.(jpg|jpeg|JPG|png|gif|icon)$ {
                    #验证blocked来源地址不为空并且符合referers配置的地址
                    #none允许来源地址为空
                    valid_referers blocked http://fdl.wdksoft.com/a fdl.wdksoft.com/a;
                    #如果不符合则会return 403
                    if ($invalid_referer) {
                        rewrite ^/ http://www.a.com:8080/a/img/zysx.png;
                        #return 403;
                    }
                }
                location /a {
                    proxy_pass http://www.a.com:8080/a/;
                    index index.html index.htm;
                    
                }
                
            }

nginx轮询宕机解决

概述

  nginx应对高并发的手段采用集群方法,如果一个服务域名背后的某个服务器发生了宕机,而此时又恰好轮询到了该服务器,那么就会发生长时间的等待,直到浏览器多次尝试后轮询到没有宕机的服务器才能完成一个服务,大大降低了服务器的效率和用户体验度,即相当于宕机的服务器白白占用了几次轮询尝试时间;

如下配置:

upstream myserver{
        #ip_hash;
        server 127.0.0.1:8081;
        server 127.0.0.1:8082;
    }
    server{
        listen       81;
        server_name  www.bproject.com;
        location / {
            root   html;
            proxy_pass  http://myserver;
            index  index.html index.htm;
            proxy_connect_timeout 1;
            proxy_send_timeout 1;
            proxy_read_timeout 1;
        }
    }

nginx解决跨域问题

什么是跨域

  使用JS获取数据时,涉及到的两个URL只要协议,域名,端口有任何一个不同,都当做是不同的域,相互访问就会有跨域问题;

怎样使用nginx解决跨域问题

  步骤一:创建两个工程AProject,BProject

     

  步骤二:在A工程中创建servlet

 
package com.wn;

import com.alibaba.fastjson.JSON;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/aServlet")
public class AServlet extends HttpServlet {
    //resp.setContentType("text/html;charset=utf-8");
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req,resp);
    }

    //方法四:使用nginx解決跨域問題
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");
        System.out.println("数据:"+username);

        //响应
        resp.getWriter().write("success");
    }
}
 

  步骤三:在B工程中创建jsp页面

 
<%--
  Created by IntelliJ IDEA.
  User: wn
  Date: 2020/2/6
  Time: 10:04
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>跨域</title>
    <script type="text/javascript" src="js/jquery-1.8.3.min.js"></script>
    <script>
        //使用nginx解决跨域问题
        $(function () {
            $("#button").click(function () {
                var username=$("#username").val();
                $.ajax({
                    url:"http://www.123.com:81/a/aServlet?username="+username,
                    type:"GET",
                    success:function (result) {
                        alert(result)
                    },
                    error:function () {
                        alert("error!!!")
                    }
                })
            })
        })

    </script>
</head>
<body>
  <input type="text" name="username" id="username"/><button id="button" type="button">提交</button>
</body>
</html>
 

  步骤四:配置nginx.conf文件

 
server {
        listen       81;
        server_name  www.123.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }
        
        #nginx解决跨域问题
        location /a {
            proxy_pass http://www.aproject.com:8080/;
            index index.html index.htm;
                    
        }
        location /b {
            proxy_pass http://www.bproject.com:8081/;
            index index.html index.htm;
        }
}
 

nginx防止DDOS攻击

什么是DDOS攻击

  DDoS攻击是Distributed Denial of Service的缩写,翻译成中文就是分布式拒绝服务。即不法黑客组织通过控制服务器等资源,发动对包括国家骨干网络、重要网络设施、政企或个人网站在内的互联网上任一目标的攻击,致使目标服务器断网,最终停止提供服务。

攻击手段

  1.通过使网络过载来干扰甚至阻断正常的网络通讯;

  2.通过向服务器提交大量请求,使服务器超负荷;

  3.阻断某一用户访问服务器;

  3.阻断某服务与特定系统或个人的通讯;

如何应对DDOS攻击

  防止DDoS攻击有很多种方法,比如使用高防服务器、CDN加速、DDoS清洗等。但是由于经费的限制,我们整不起那些个高大上的玩意,所以只能在我们现有的材料上加工加工来达到应对DDoS攻击的目的。

nginx防止DDOS攻击

  配置nginx.conf文件

 
  #防止ddos攻击
    #限制IP的每秒请求次数
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
    #限制同一个IP同一时间内创建连接次数
    limit_conn_zone $binary_remote_addr zone=addr:10m;
    server {
        listen       81;
        server_name  www.ddos.com;

        location /a {
            limit_conn addr 1;        #同一时间内只能建立一次连接
            limit_req zone=one;
            proxy_pass http://www.aproject.com:8080/welcome.jsp;
            index index.html index.htm;
            
        }
    }
 

    $binary_remote_addr:二进制远程地址;

    zone=one:10m:定义zone名字叫one,并为这个zone分配了内存,用来存储会话(二进制远程地址),1m内存可以保存16000会话;

    rate=1r/s:限制频率为每秒1个请求;

    注:因为设置了1秒钟一个连接,如果一秒钟超过一个请求的话,就是报503状态码,如果一秒钟一个请求,就是正常访问。

 

  nginx应对高并发的手段采用集群方法,如果一个服务域名背后的某个服务器发生了宕机,而此时又恰好轮询到了该服务器,那么就会发生长时间的等待,直到浏览器多次尝试后轮询到没有宕机的服务器才能完成一个服务,大大降低了服务器的效率和用户体验度,即相当于宕机的服务器白白占用了几次轮询尝试时间;

如下配置:

什么是跨域

  使用JS获取数据时,涉及到的两个URL只要协议,域名,端口有任何一个不同,都当做是不同的域,相互访问就会有跨域问题;

怎样使用nginx解决跨域问题

  步骤一:创建两个工程AProject,BProject

     

  步骤二:在A工程中创建servlet

 
package com.wn;

import com.alibaba.fastjson.JSON;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/aServlet")
public class AServlet extends HttpServlet {
    //resp.setContentType("text/html;charset=utf-8");
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req,resp);
    }

    //方法四:使用nginx解決跨域問題
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");
        System.out.println("数据:"+username);

        //响应
        resp.getWriter().write("success");
    }
}
 

  步骤三:在B工程中创建jsp页面

 
<%--
  Created by IntelliJ IDEA.
  User: wn
  Date: 2020/2/6
  Time: 10:04
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>跨域</title>
    <script type="text/javascript" src="js/jquery-1.8.3.min.js"></script>
    <script>
        //使用nginx解决跨域问题
        $(function () {
            $("#button").click(function () {
                var username=$("#username").val();
                $.ajax({
                    url:"http://www.123.com:81/a/aServlet?username="+username,
                    type:"GET",
                    success:function (result) {
                        alert(result)
                    },
                    error:function () {
                        alert("error!!!")
                    }
                })
            })
        })

    </script>
</head>
<body>
  <input type="text" name="username" id="username"/><button id="button" type="button">提交</button>
</body>
</html>
 

  步骤四:配置nginx.conf文件

 
server {
        listen       81;
        server_name  www.123.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }
        
        #nginx解决跨域问题
        location /a {
            proxy_pass http://www.aproject.com:8080/;
            index index.html index.htm;
                    
        }
        location /b {
            proxy_pass http://www.bproject.com:8081/;
            index index.html index.htm;
        }
}
 

什么是DDOS攻击

  DDoS攻击是Distributed Denial of Service的缩写,翻译成中文就是分布式拒绝服务。即不法黑客组织通过控制服务器等资源,发动对包括国家骨干网络、重要网络设施、政企或个人网站在内的互联网上任一目标的攻击,致使目标服务器断网,最终停止提供服务。

攻击手段

  1.通过使网络过载来干扰甚至阻断正常的网络通讯;

  2.通过向服务器提交大量请求,使服务器超负荷;

  3.阻断某一用户访问服务器;

  3.阻断某服务与特定系统或个人的通讯;

如何应对DDOS攻击

  防止DDoS攻击有很多种方法,比如使用高防服务器、CDN加速、DDoS清洗等。但是由于经费的限制,我们整不起那些个高大上的玩意,所以只能在我们现有的材料上加工加工来达到应对DDoS攻击的目的。

nginx防止DDOS攻击

  配置nginx.conf文件

 
  #防止ddos攻击
    #限制IP的每秒请求次数
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
    #限制同一个IP同一时间内创建连接次数
    limit_conn_zone $binary_remote_addr zone=addr:10m;
    server {
        listen       81;
        server_name  www.ddos.com;

        location /a {
            limit_conn addr 1;        #同一时间内只能建立一次连接
            limit_req zone=one;
            proxy_pass http://www.aproject.com:8080/welcome.jsp;
            index index.html index.htm;
            
        }
    }
 

    $binary_remote_addr:二进制远程地址;

    zone=one:10m:定义zone名字叫one,并为这个zone分配了内存,用来存储会话(二进制远程地址),1m内存可以保存16000会话;

    rate=1r/s:限制频率为每秒1个请求;

    注:因为设置了1秒钟一个连接,如果一秒钟超过一个请求的话,就是报503状态码,如果一秒钟一个请求,就是正常访问。

猜你喜欢

转载自www.cnblogs.com/lowerma/p/12292398.html