整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          四種解決Nginx出現(xiàn)403 forbidden 報(bào)錯(cuò)的方法

          是在在本地用虛擬機(jī)中通過yum安裝nginx的,安裝一切正常,但是訪問時(shí)報(bào)403,

          于是查看nginx日志,路徑為/var/log/nginx/error.log。打開日志發(fā)現(xiàn)報(bào)錯(cuò)Permission denied,詳細(xì)報(bào)錯(cuò)如下:

          1. open() "/data/www/1.txt" failed (13: Permission denied), client: 192.168.1.194, server: www.web1.com, request: "GET /1.txt HTTP/1.1", host: "www.web1.com"

          沒有權(quán)限?于是找了不少資料,可以通過下面四步排查解決此問題。你可能只是其中之前配置有問題,不一定四個(gè)步驟都用上。

          一、由于啟動(dòng)用戶和nginx工作用戶不一致所致

          1.1查看nginx的啟動(dòng)用戶,發(fā)現(xiàn)是nobody,而為是用root啟動(dòng)的

          命令:ps aux | grep "nginx: worker process" | awk'{print }'

          1.2將nginx.config的user改為和啟動(dòng)用戶一致,

          命令:vi conf/nginx.conf

          二、缺少index.html或者index.php文件,就是配置文件中index index.html index.htm這行中的指定的文件。

          1. server {2. listen 80;3. server_name localhost;4. index index.php index.html;5. root /data/www/;6. }

          如果在/data/www/下面沒有index.php,index.html的時(shí)候,直接文件,會(huì)報(bào)403 forbidden。

          三、權(quán)限問題,如果nginx沒有web目錄的操作權(quán)限,也會(huì)出現(xiàn)403錯(cuò)誤。

          解決辦法:修改web目錄的讀寫權(quán)限,或者是把nginx的啟動(dòng)用戶改成目錄的所屬用戶,重啟Nginx即可解決

          1. chmod -R 777 /data2. chmod -R 777 /data/www/

          四、SELinux設(shè)置為開啟狀態(tài)(enabled)的原因。

          4.1、查看當(dāng)前selinux的狀態(tài)。

          1. /usr/sbin/sestatus

          4.2、將SELINUX=enforcing 修改為 SELINUX=disabled 狀態(tài)。

          1. vi /etc/selinux/config2.3. #SELINUX=enforcing4. SELINUX=disabled

          4.3、重啟生效。reboot。

          1. reboot

          ginx不僅僅只是一款反向代理和負(fù)載均衡服務(wù)器,它還能提供很多強(qiáng)大的功能,例如:限流、緩存、黑白名單和灰度發(fā)布等等。在之前的文章中,我們已經(jīng)介紹了Nginx提供的這些功能。今天,我們來介紹Nginx另一個(gè)強(qiáng)大的功能:禁用IP和IP段。

          禁用IP和IP段

          Nginx的ngx_http_access_module 模塊可以封配置內(nèi)的ip或者ip段,語法如下:

          deny IP; 
          deny subnet; 
          allow IP; 
          allow subnet; 
          # block all ips 
          deny    all; 
          # allow all ips 
          allow    all; 

          如果規(guī)則之間有沖突,會(huì)以最前面匹配的規(guī)則為準(zhǔn)。

          配置禁用ip和ip段

          下面說明假定nginx的目錄在/usr/local/nginx/。

          首先要建一個(gè)封ip的配置文件blockips.conf,然后vi blockips.conf編輯此文件,在文件中輸入要封的ip。

          deny 1.2.3.4;
          deny 91.212.45.0/24; 
          deny 91.212.65.0/24; 

          然后保存此文件,并且打開nginx.conf文件,在http配置節(jié)內(nèi)添加下面一行配置:

          include blockips.conf; 

          保存nginx.conf文件,然后測(cè)試現(xiàn)在的nginx配置文件是否是合法的:

          /usr/local/nginx/sbin/nginx -t 

          如果配置沒有問題,就會(huì)輸出:

          the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
          configuration file /usr/local/nginx/conf/nginx.conf test is successful 

          如果配置有問題就需要檢查下哪兒有語法問題,如果沒有問題,需要執(zhí)行下面命令,讓nginx重新載入配置文件。

          /usr/local/nginx/sbin/nginx -s reload 

          僅允許內(nèi)網(wǎng)ip

          如何禁止所有外網(wǎng)ip,僅允許內(nèi)網(wǎng)ip呢?

          如下配置文件

          location / { 
            # block one workstation 
            deny    192.168.1.1; 
            # allow anyone in 192.168.1.0/24 
            allow   192.168.1.0/24; 
            # drop rest of the world 
            deny    all; 
          } 
          

          上面配置中禁止了192.168.1.1,允許其他內(nèi)網(wǎng)網(wǎng)段,然后deny all禁止其他所有ip。

          格式化nginx的403頁面

          如何格式化nginx的403頁面呢?

          首先執(zhí)行下面的命令:

          cd /usr/local/nginx/html
          vi error403.html 

          然后輸入403的文件內(nèi)容,例如:

          <html> 
          <head><title>Error 403 - IP Address Blocked</title></head> 
          <body> 
          Your IP Address is blocked. If you this an error, please contact binghe with your IP at test@binghe.com 
          </body> 
          </html> 

          如果啟用了SSI,可以在403中顯示被封的客戶端ip,如下:

          Your IP Address is <!--#echo var="REMOTE_ADDR" --> blocked. 

          保存error403文件,然后打開nginx的配置文件vi nginx.conf,在server配置節(jié)內(nèi)添加下面內(nèi)容。

          # redirect server error pages to the static page 
           error_page   403  /error403.html; 
           location = /error403.html { 
                   root   html; 
           } 

          然后保存配置文件,通過nginx -t命令測(cè)試配置文件是否正確,若正確通過nginx -s reload載入配置。


          HTMLAgilityPack 是一個(gè)開源的.NET庫,旨在幫助開發(fā)人員處理和操作HTML文檔。它提供了解析HTML文檔、查詢DOM元素以及修改HTML內(nèi)容的功能。HTMLAgilityPack 基于XPath和LINQ查詢,使得開發(fā)者能夠以類似于操作XML文檔的方式來操作HTML文檔。這使得從復(fù)雜的HTML結(jié)構(gòu)中提取所需數(shù)據(jù)變得輕而易舉。

          正文


          HTMLAgilityPack 主要用于以下幾個(gè)方面:

          1. 解析HTML文檔:HTMLAgilityPack 可以將原始的HTML文檔解析成一個(gè)DOM(文檔對(duì)象模型)樹,使開發(fā)者能夠輕松地遍歷和操作HTML元素。
          2. 查詢和選擇元素:通過使用XPath表達(dá)式或LINQ查詢,您可以輕松地選擇和定位HTML文檔中的特定元素,從而實(shí)現(xiàn)數(shù)據(jù)的抽取和操作。
          3. 修改HTML內(nèi)容:您可以使用HTMLAgilityPack來添加、刪除或修改HTML元素和屬性,以滿足特定的需求。
          4. HTML格式化與轉(zhuǎn)換:HTMLAgilityPack 還允許您將HTML文檔格式化為漂亮的字符串或轉(zhuǎn)換為其他格式,如純文本或Markdown。

          常用方法與學(xué)用屬性

          以下是一些常用的HTMLAgilityPack方法和屬性,以及它們的用途:

          1. HtmlDocument.Load(string path):從指定路徑加載HTML文檔。
          2. HtmlDocument.LoadHtml(string html):從字符串加載HTML文檔。
          3. HtmlDocument.DocumentNode:獲取整個(gè)HTML文檔的根節(jié)點(diǎn)。
          4. SelectSingleNode(string xpath):根據(jù)XPath表達(dá)式選擇單個(gè)節(jié)點(diǎn)。
          5. SelectNodes(string xpath):根據(jù)XPath表達(dá)式選擇多個(gè)節(jié)點(diǎn)。
          6. InnerText:獲取或設(shè)置元素的文本內(nèi)容。
          7. OuterHtml:獲取或設(shè)置元素及其內(nèi)部?jī)?nèi)容的HTML。
          8. Attributes:獲取元素的屬性集合。
          9. AppendChild(HtmlNode newChild):將新節(jié)點(diǎn)添加為子節(jié)點(diǎn)。
          10. Remove():從文檔中移除當(dāng)前節(jié)點(diǎn)。

          Nuget安裝 HtmlAgilityPack庫

          解析并顯示標(biāo)題

          我們使用 HttpClient 發(fā)送一個(gè) GET 請(qǐng)求到指定的 HTTPS URL,并且讀取返回的響應(yīng)內(nèi)容。

          如果出現(xiàn) HTTP 狀態(tài)碼 403 (Forbidden) 錯(cuò)誤表示您的請(qǐng)求被服務(wù)器拒絕,通常是因?yàn)榉?wù)器認(rèn)為您沒有權(quán)限訪問該資源。

          1. 檢查網(wǎng)站訪問權(quán)限:確保您有權(quán)訪問目標(biāo)網(wǎng)站。有些網(wǎng)站可能需要登錄或具有特定權(quán)限才能訪問其內(nèi)容。
          2. 用戶代理頭:有些網(wǎng)站要求用戶代理標(biāo)頭,您可以嘗試在請(qǐng)求中添加一個(gè)用戶代理標(biāo)頭來模擬瀏覽器行為
          3. Cookies 和 Session:如果目標(biāo)網(wǎng)站使用 cookies 或會(huì)話來管理訪問權(quán)限,請(qǐng)確保您正確處理這些信息。您可能需要發(fā)送適當(dāng)?shù)?cookies 或會(huì)話信息以獲取訪問權(quán)限。
          4. IP封鎖:某些網(wǎng)站可能根據(jù) IP 地址阻止訪問,如果您的 IP 被封鎖,您可能需要使用代理服務(wù)器來繞過封鎖。
          5. 代理服務(wù)器:如果您的網(wǎng)絡(luò)中存在代理服務(wù)器,請(qǐng)確保代理服務(wù)器的設(shè)置正確,并且允許訪問目標(biāo)網(wǎng)站。
          6. 身份驗(yàn)證:如果網(wǎng)站需要身份驗(yàn)證,您可能需要在請(qǐng)求中包含適當(dāng)?shù)纳矸蒡?yàn)證憑據(jù)。您可以使用 HttpClient 的 DefaultRequestHeaders.Authorization 屬性來添加身份驗(yàn)證標(biāo)頭。
          7. 請(qǐng)求頭和參數(shù):某些網(wǎng)站可能會(huì)要求特定的請(qǐng)求頭或查詢參數(shù),您需要查看網(wǎng)站的文檔或分析網(wǎng)絡(luò)請(qǐng)求以確定所需的請(qǐng)求標(biāo)頭和參數(shù)。
          private async void btnGetTitle_Click(object sender, EventArgs e)
          {
              HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
          
              string htmlContent = "";
              using (HttpClient httpClient = new HttpClient())
              {
                  try
                  {
          
                      httpClient.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3");
                     
                      HttpResponseMessage response = await httpClient.GetAsync("https://www.baidu.com");
                      
                      //檢查 HTTP 響應(yīng)的狀態(tài)碼是否表示成功
                      response.EnsureSuccessStatusCode();
          
                      //讀取內(nèi)容
                      byte[] bytes = await response.Content.ReadAsByteArrayAsync();
                      htmlContent = Encoding.UTF8.GetString(bytes);
          
                  }
                  catch (HttpRequestException ex)
                  {
          
                  }
              }
          
              doc.LoadHtml(htmlContent);
          
              HtmlNode titleNode = doc.DocumentNode.SelectSingleNode("//title");
              if (titleNode != null)
              {
                  string title = titleNode.InnerText;
                  MessageBox.Show($"頁面標(biāo)題:{title}");
              }
          }
          
          

          提取所有鏈接

          /// <summary>
          /// 通過url取得html內(nèi)容
          /// </summary>
          /// <param name="url"></param>
          /// <returns></returns>
          private async Task<string> GetHtml(string url)
          {
          
              string htmlContent = "";
              using (HttpClient httpClient = new HttpClient())
              {
                  try
                  {
          
                      httpClient.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3");
          
                      HttpResponseMessage response = await httpClient.GetAsync(url);
          
                      response.EnsureSuccessStatusCode();
          
                      //讀取內(nèi)容
                      byte[] bytes = await response.Content.ReadAsByteArrayAsync();
                      htmlContent = Encoding.UTF8.GetString(bytes);
          
                  }
                  catch (HttpRequestException ex)
                  {
          
                  }
              }
              return htmlContent;
          }
          
          private async void btnGetLinks_Click(object sender, EventArgs e)
          {
              HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
              string htmlContent =await GetHtml("https://www.baidu.com");
              doc.LoadHtml(htmlContent);
          
              HtmlNodeCollection linkNodes = doc.DocumentNode.SelectNodes("//a[@href]");
              if (linkNodes != null)
              {
                  foreach (HtmlNode linkNode in linkNodes)
                  {
                      string link = linkNode.GetAttributeValue("href", "");
                      lstLink.Items.Add(link);
                  }
              }
          }
          
          

          通過class 去找節(jié)點(diǎn)

          private async void btnGetSpecialLink_Click(object sender, EventArgs e)
          {
              HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
              string htmlContent = await GetHtml("https://news.baidu.com/");
              doc.LoadHtml(htmlContent);
          
              HtmlNodeCollection linkNodes = doc.DocumentNode.SelectNodes("//*[@id=\"pane-news\"]/ul/li[@class=\"bold-item\"]/a");
              if (linkNodes != null)
              {
                  foreach (HtmlNode linkNode in linkNodes)
                  {
                      string link = linkNode.GetAttributeValue("href", "");
                      string title = linkNode.InnerText;
                      lnkSpecialLink.Items.Add(title + " " + link);
                  }
              }
          }
          
          

          快速找到節(jié)點(diǎn)path

          Linq 找查節(jié)點(diǎn)


          主站蜘蛛池模板: 波多野结衣一区视频在线| 爱爱帝国亚洲一区二区三区| 肉色超薄丝袜脚交一区二区| 亚洲中文字幕无码一区| 中文字幕一区二区人妻性色| 久久青草精品一区二区三区| 日韩在线一区二区| 无码欧精品亚洲日韩一区夜夜嗨 | 免费无码一区二区三区蜜桃大| 99精品一区二区三区| 国产在线观看一区二区三区| 亚洲一区二区三区高清在线观看| 免费一区二区三区| 日本一区二区高清不卡| 国产精品亚洲专区一区| 亚洲高清一区二区三区 | 国产一区二区视频在线播放| 日本一区免费电影| 精产国品一区二区三产区| AA区一区二区三无码精片| 日韩亚洲一区二区三区| 性色av无码免费一区二区三区| 竹菊影视欧美日韩一区二区三区四区五区 | 色一情一乱一伦一区二区三欧美| 亚洲一区动漫卡通在线播放| 精品免费国产一区二区三区| 国产成人AV一区二区三区无码| 国产凹凸在线一区二区| 性色av一区二区三区夜夜嗨 | 国产福利一区二区三区在线观看| 精品免费国产一区二区三区| 国产91精品一区二区麻豆网站| 亚洲国产日韩在线一区| 激情无码亚洲一区二区三区| 亚洲A∨精品一区二区三区 | 亚洲熟女www一区二区三区| 国产怡春院无码一区二区 | 精品人妻一区二区三区浪潮在线 | 精品国产一区二区三区色欲| 91国在线啪精品一区| 日韩一区二区三区在线|