<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ### **1. IP限制** > http_access_module 允許訪問 ``` Syntax: allow address | CIDR | unix: | all; Default:— Context: http, server, location, limit_except ``` 禁止訪問 ``` Syntax: deny address | CIDR | unix: | all; Default:— Context: http, server, location, limit_except ``` 使用案例: ~~~ location / { deny 192.168.1.1; allow 192.168.1.0/24; allow 10.1.1.0/16; allow 2001:0db8::/32; deny all; #從上到下的順序,類似iptables。匹配到了便跳出。如上的例子先禁止了192.16.1.1,接下來允許了3個網段,其中包含了一個ipv6,最后未匹配的IP全部禁止訪問.被deny的將返回403狀態碼。 } ~~~ Nginx基于access_module有局限性 原理:基于客戶端的IP,但是對于Nginx來說,它不會管你哪個是真正的客戶端,如果我們的訪問不是客戶端與服務端直接連接,而是通過了一層代理,比如它的代理可以負載均衡、CDN的這種代理實現,也就是我們的訪問不是客戶端直接訪問的服務端,而是通過其他的中間件訪問服務端,這時候會出現一個問題,因為Nginx的access_module它是基于remote_addr這個變量來識別客戶端的IP的,那么如果一個ip通過中間件訪問服務端,那么Nginx認為訪問的ip就是中間件的IP,那么我們在基于IP做限制的時候,那么其實是沒有作用的。所以這樣的話,準確性是不高的,所以就是利用nginx的access_module有局限性。 解決方法: ①:采用別的http頭信息訪問控制,如HTTP_X_FORWARDED_FOR。 ![](https://images2018.cnblogs.com/blog/676372/201803/676372-20180311152302986-1165763526.png) 但是http\_x\_forwarded\_for進行訪問控制會存在問題,因為是一個協議要求的,并不是所有的cdn和代理廠商它會按照要求來做,甚至x\_forwarded\_for存在被修改的可能,因為只是一個頭信息,所以最終還是不真實。 http_x_forwardded_for也是Nginx的http頭變量的一個常用的變量,它和remote_addr是有區別的。不同的是,x_forwarded_for是http協議中規定頭中要攜帶的,所以在客戶端訪問中間件,再訪問服務端的時候,那么服務端通過Nginx會記錄真實IP和中間件的IP。 格式:http_x_forwarded_for = 客戶端ip,第一臺代理ip,第二臺代理ip,第N臺代理ip....,所以http_x_forwarded_for是由一連串以逗號分隔的ip組成的。 ②:結合geo模塊 ③:通過HTTP自定義變量傳遞 因為nginx有自己的變量,我們可以在http頭信息定義一個我們規定的http變量在所有上一級的設備手動把remote\_addr的ip一級一級的攜帶過去,既能避免x_forwarded_for被修改,也能讀到客戶端的真實ip ***** ### **2. 用戶登錄限制** > http_auth_basic_module ``` Syntax: auth_basic_user_file file; Default: — Context: http, server, location, limit_except ``` 配置: 1.安裝插件:yum -y install httpd-tools 2.查看htpasswd插件:rpm -qf /usr/bin/htpasswd 3.生成一個身份文件(用于訪問站點時登錄) ①cd /etc/nginx ②htpasswd -c ./auth_conf/hao_admin (auth_conf :保存用戶身份信息的文件;hao_admin:用戶名) ③修改配置文件(示例:ip/admin.html) ``` location ~ ^/admin.html { ????????root /data/www; ????????auth_basic "auth:";?//開啟身份校驗 ????????auth_basic_user_file /etc/nginx/auth_conf;?//身份校驗文件路徑 ????????index index.html; ????} ``` 訪問效果(瀏覽器) ![](https://img.kancloud.cn/c7/df/c7dfb415a587160a59c75a4925e78acb_368x199.png) 局限性 需要提前設置密碼文件 、管理麻煩效率低下 解決方案: ① 通過lua文件實現 ②nginx和LDAP打通,利用nginx_auth_ladap實現
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看