linux入門系列18--Web服務之Apache服務1

来源:https://www.cnblogs.com/heimatengyun/archive/2020/03/23/12550272.html
-Advertisement-
Play Games

前面系列文章講解了Linux下通過文件傳輸、文件共用、郵件系統來分享和獲取資源,本文講解網路資源獲取和共用的另外一種形式,通過Apache服務程式來提供Web服務。 ...


前面系列文章講解了Linux下通過文件傳輸、文件共用、郵件系統來分享和獲取資源,本文講解網路資源獲取和共用的另外一種形式,通過Apache服務程式來提供Web服務。

本文先講解目前主流的Web服務程式以及各自的特點和優勢,然後以Apache服務為例講解Linux下Web網站的部署,併在部署過程中穿插講解SELinux的使用。最後在以示例講解Apache的虛擬主機功能及訪問控制。

一、Web服務程式分類

我們平時在互聯網上訪問的網站服務就是Web服務,比如我們常用的百度網站,他就是一個Web網站。Web網路服務,一般是指允許用戶通過瀏覽器訪問到其中各種資源的服務。

Web網路服務是一種被動訪問的服務程式,當接入到互聯網中的用戶主機發出請求後,Web服務才會響應並通過HTTP或HTTPS把請求的內容回傳給用戶。示意圖如下:

在這裡插入圖片描述

目前提供Web服務的程式有:IIS、Apache、Ngnix等。

1.1 IIS

IIS(Internet Information Services):互聯網信息服務,是Windows系統中預設的Web服務程式。它是一款帶圖形化界面的網站管理工具,不僅提供Web網站服務,還可以提供FTP、SMTP等服務,功能豐富。但是由於它是用在Windows系統中,因此不介紹它。

1.2 Apache

Apache程式是目前市場上占有率很高的Web服務程式之一,其特點是跨平臺、安全性高、API擴展簡單可靠。

Apache服務程式可以運行在Linux、UNIX、 Windows系統中,支持基於IP、功能變數名稱及埠號的虛擬主機功能,支持多種認證方式,集成有代理伺服器模塊、安全Socket層(SSL),能夠實時監視服務狀態與定製日誌消息,有著各類豐富的模塊支持。

由於它是RHEL5、6、7中預設的Web服務程式,並且作為老牌的Web服務程式,市場占用率還是很高的,因此本文主要以Apache為例進行Web服務的演示。

1.3 Ngnix

2004年,為俄羅斯知名門戶站點開發的Web服務程式Nginx橫空出世。它作為一款輕量級的網站服務軟體,因其穩定性和豐富的功能而快速占領伺服器市場。

它因系統資源消耗低、併發能力強的特點,在國內受到諸如新浪、騰訊、網易等門戶網站的青睞。Ngnix作為後起之秀,截至本文寫作時為止市場占有率幾乎與Apache齊平,以後有機會再單獨對其進行演示和講解。

二、Apache安裝及操作案例

2.1 Apache安裝及配置

2.1.1 Apache安裝

Apache是RHEL7預設的web程式,以包含在預設的安裝鏡像中,因此可以直接掛載安裝鏡像直接安裝,也可以用遠程Yum倉庫進行安裝。

需要註意的是,在CentOS和RHEL上,Apache軟體包和服務稱為httpd而非apache。

  • 安裝Apache

先檢查Apache是否安裝,如果未安裝,通過yum倉庫安裝即可

[root@apache ~]# rpm -q httpd
package httpd is not installed
[root@apache ~]# yum install httpd
Loaded plugins: fastestmirror, langpacks
...省略部分內容
Complete!
[root@apache ~]# rpm -q httpd
httpd-2.4.6-90.el7.centos.x86_64
[root@apache ~]# 

安裝完成後,httpd服務是沒有啟動的,還需要將其啟動,並加入到開機啟動中

[root@apache ~]# systemctl start httpd
[root@apache ~]# systemctl enable httpd
ln -s '/usr/lib/systemd/system/httpd.service' '/etc/systemd/system/multi-user.target.wants/httpd.service'
[root@apache ~]# 

此時在虛擬機Centos內部,打開瀏覽器,即可看到apache部署成功

在這裡插入圖片描述

如果要讓外部機器(如宿主機)訪問此Web,則需要對防火牆進行設置,當然直接關閉防火牆也可以,不過這樣存在風險。

根據前文講解的防火牆知識,打開HTTP和HTTPS的80和443埠

[root@apache ~]# firewall-cmd --permanent --zone=public --add-service=http
success
[root@apache ~]# firewall-cmd --permanent --zone=public --add-service=https
success
[root@apache ~]# firewall-cmd --reload 
success
[root@apache ~]#

這樣宿主機上也可以直接訪問該Web,如下圖

在這裡插入圖片描述

  • 查看httpd版本信息:
[root@apache ~]# httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built:   Aug  8 2019 11:41:18
[root@apache ~]# 
  • 查看httpd運行狀態
[root@apache ~]# systemctl status httpd
httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)
   Active: active (running) since Mon 2020-02-10 10:52:35 CST; 7min ago
     Docs: man:httpd(8)
           man:apachectl(8)
...省略部分內容
2.1.2 Apache配置

只有掌握httpd服務相關配置文件以及各自的用途,才能更好地對其進行配置了。

  • 主要配置文件

httpd服務程式預設主要配置文件(這些預設配置是可以進行修改的)如下:

用途 文件
服務目錄 /etc/httpd
主配置文件 /etc/httpd/conf/httpd.conf
網站數據目錄 /var/www/html
訪問日誌 /var/log/httpd/access_log
錯誤日誌 /var/log/httpd/error_log

主配置文件為:/etc/httpd/conf/httpd.conf,在此文件中存存在三種類型的類型:註釋行信息、全局配置、區域配置。

從主配置文件中截取部分進行說明如下:

在這裡插入圖片描述

全局配置參數

全局配置參數就是一種全局性的配置參數,可作用於對所有的子站點,既保證了子站點的正常訪問,也有效減少了頻繁寫入重覆參數的工作量。

區域配置參數

區域配置參數則是單獨針對於每個獨立的子站點進行設置的。

  • 主要參數

httpd服務程式最常用的參數如下

參數 用途
ServerRoot 服務目錄
ServerAdmin 管理員郵箱
User 運行服務的用戶
Group 運行服務的用戶組
ServerName 網站伺服器的功能變數名稱
DocumentRoot 網站數據目錄
Directory 網站數據目錄的許可權
Listen 監聽的 IP 地址與埠號
DirectoryIndex 預設的索引頁頁面
ErrorLog 錯誤日誌文件
CustomLog 訪問日誌文件
Timeout 網頁超時時間,預設為 300 秒
  • 案例演示:修改網站首頁內容

分析:既然上表中提到DocumentRoot是用於定義網站數據的保存路徑,那我們查看下其參數的預設值,然後把對應網頁內容放入該目錄,就可以實現網頁替換。靜態網頁名稱一般為index.html。

打開主配置文件

[root@apache ~]# vim /etc/httpd/conf/httpd.conf 

在這裡插入圖片描述

查看到看預設網站數據目錄為:/var/www/html。預設該目錄為空,向目錄中創建index.html文件,並通過瀏覽器進行查看。

如果忘記VI或VIM編輯器使用方法的,請返回覆習前面的文章:“linux入門系列4--vi&vim編輯器”。

[root@apache ~]# ll /var/www/html/
total 0
[root@apache ~]# echo "hi,this is heimatengyun's blog">/var/www/html/index.html
[root@apache ~]# ll /var/www/html/
total 4
-rw-r--r--. 1 root root 31 Feb 10 11:59 index.html
[root@apache ~]# 

在宿主機通過瀏覽器再次查看,即可查看剛纔新加的網頁文件內容

在這裡插入圖片描述

通過這樣的操作,我們應該明白,如果你已經做好你的網頁內容,只需要往/var/www/html/目錄存放,即可實現網站的訪問。

但實際工作中,有可能我們會更換網站目錄,把網站內容存放到一個指定的目錄中,而非預設的/var/www/html/。這該怎麼做呢?這就會涉及到SELinux的問題,因此請繼續下邊的實驗。

2.2 SELinux相關知識

2.2.1 問題引出

假設我們把系統根目錄下的website目錄作為網站目錄,我們進行如下操作:

(1)創建自定義網站目錄和網頁文件

[root@apache /]# mkdir /website
[root@apache /]# cd /website/
[root@apache website]# echo "this is my custom directory">index.html
[root@apache website]# ll
total 4
-rw-r--r--. 1 root root 28 Feb 10 12:21 index.html
[root@apache website]#

(2)主配置文件中配置目錄

[root@apache website]# vim /etc/httpd/conf/httpd.conf 

在這裡插入圖片描述

主要修改DocumentRoot參數指定網站目錄為/website,同時修改定義目錄許可權的區域參數Directory。

(3)訪問驗證

配置完成後,重啟httpd服務

[root@apache website]# systemctl restart httpd

在宿主機中瀏覽器查看

在這裡插入圖片描述

見鬼,怎麼顯示的還是httpd預設的頁面呢?

一般情況只有網站的首頁頁面文件不存在或用戶許可權不足時,才顯示httpd預設的頁面。比如後文的4.1,設置禁止的ip訪問後,就直接跳轉到此頁面。

我們在加上文件名試下呢

在這裡插入圖片描述

可以看到提示許可權不足,看到這裡,你應該想到是SELinux在搞鬼。為了驗證一下,讓我們把SELinux關閉後在試試看

[root@apache website]# getenforce 
Enforcing
[root@apache website]# setenforce 0
[root@apache website]# getenforce  
Permissive
[root@apache website]# 

再次在宿主機瀏覽器訪問

在這裡插入圖片描述

發現可以訪問了,那說明果然是SELinux在搞鬼。但生產環境不建議直接關閉SELinux,接下來我們就來看看SELinux相關的知識,掌握之後我們在來開啟SELinux併進行設置,使其在SELinux開啟的情況下依然可以訪問我們Web網站。

2.2.2 SELinux相關知識

在前面的文件傳輸、文件共用、郵件系統的文章中或多或少都講解了SELinux相關的知識,本文再次集中總結一下。

2.2.2.1 SELinux概述

SELinux(Security-Enhanced Linux)是美國國家安全局在Linux開源社區的幫助下開發的 一個強制訪問控制(MAC,Mandatory Access Control)的安全子系統。

***RHEL7系統使用SELinux技術的目的是為了讓各個服務進程都受到約束,使其僅獲取到本應獲取的資源。***它的重要性不言而喻,舉個例子,比如你從網上下載了一個軟體用於編輯文檔,但是這個軟體“不老實”,當你正在努力碼字的同時,它卻悄悄監視你在各個網站登錄時輸入的密碼,然後悄悄上傳到黑客指定的地址。SELinux就是為了防止這種情況的發生而開發的,從而更好的保護你的電腦。

SELinux具體從兩個方面進行限制:SELinux域和上下文

SELinux域對服務程式的功能進行限制,可以確保服務程式做不了出格的事情。

SELinux上下文對文件資源的訪問限制,確保文件資源 只能被其所屬的服務程式進行訪問。

開啟SELinux後,這樣就等於開啟了系統雙保險,系統內的服務程式只能規規矩矩地拿到自己所應該獲取的資源,這樣即便黑客入侵了系 統,也無法利用系統內的服務程式進行越權操作。

SELinux配置有三種模式,如下:

參數值 作用
enforcing 強制啟用安全策略模式,將攔截服務的不合法請求
permissive 遇到服務越權訪問時,只發出警告而不強制攔截
disabled 對於越權的行為不警告也不攔截

正如2.2.1中,通過setenforce 0命令將SELinux關閉後,我們的Web就可以訪問了,就是這個道理。

SELinux配置文件對應為:/etc/selinux/config 。

[root@apache website]# cat /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted 
[root@apache website]# 

該文件中的值定義的是SELinux預設的運行狀態,也就是系統重啟後的狀態,因此修改它不會立即生效

2.2.2 SELinux相關命令
  • getenforce命令

用於查看SELinux的運行模式

[root@apache website]# getenforce 
Enforcing
[root@apache website]# 
  • setenforece命令

setenforce 0或1,用於禁用(0)或啟用(1)SELinux,註意這個命令的修改只是臨時的,系統重啟後就會失效

[root@apache website]# getenforce 
Enforcing
[root@apache website]# setenforce 0
[root@apache website]# getenforce  
Permissive
[root@apache website]

因此,如果原來系統的SELinux是關閉的,如果要開啟它,需要在配置文件中將進行設置SELINUX=enforcing,並同時要通過setenforce 1進行設置。這樣即使系統重啟,依然生效。

  • semanage命令

用於設置SELinux上下文的值,管理SELinux的策略。

語法格式:semanage [選項] [文件]”

參數

參數 作用
-l 查詢
-a 添加
-m 修改
-d 刪除

具體使用細節可以通過幫助命令man semanage進行查看。

  • getseboll命令

該命令用於查看SELinux域相關的安全策略。

語法格式:getsebool -a(其中-a參數表示查看所有域相關的安全策略)

[root@apache ~]# getsebool 
usage:  getsebool -a or getsebool boolean...
[root@apache ~]# getsebool -a
abrt_anon_write --> off
abrt_handle_event --> off
abrt_upload_watch_anon_write --> on
antivirus_can_scan_system --> off
...省略部分內容

其中,on表示允許狀態,off表示禁止狀態。

  • setsebool命令

該命令用於修改SELinux域相關的策略規則。

語法格式:setsebool -P 規則項=on或off (其中-P參數表示立即讓修改永久生效)

[root@apache ~]# getsebool -a | grep xdm_write_home
xdm_write_home --> off
[root@apache ~]# setsebool -P xdm_write_home=on
[root@apache ~]# getsebool -a | grep xdm_write_home
xdm_write_home --> on
[root@apache ~]# setsebool -P xdm_write_home=off
[root@apache ~]# getsebool -a | grep xdm_write_home
xdm_write_home --> off
[root@apache ~]# getsebool xdm_write_home
xdm_write_home --> off

以上實驗,我們先查看grep xdm_write_home狀態,然後將其改為on,查看修改是否生效,然後再將其改回原值。查看某一項的值可以通過正則匹配,也可以直接通過該具體項獲取。

有了以上這些儲備知識,我們再繼續完成開啟SELinux的情況下讓我們自定義目錄的網站也能訪問。

2.3 Apache案例1:修改網站目錄

通過上邊的講解,我們大概已經知道了前面的問題就是SELinux上下文引起,因此我們通過以下命令來查看下預設的/var/www/html和我們自定義的/website他們的SELinux上下文的值究竟有什麼不同

[root@apache website]# ll -Z /var/www/html/
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html
[root@apache website]# ll -Z /website/
-rw-r--r--. root root unconfined_u:object_r:default_t:s0 index.html
[root@apache website]# 

我們通過ll命令的-Z參數進行查看,很明顯就看到了不同。(-Z參數專門用於查看SELinux域相關設置)

可以看到在文件上設置的SELinux安全上下文是由用戶段、角色段以及類型段等多個信息項共同組成的。以上示例中,用戶段system_u代表系統進程的身份,角色段object_r代表文件目錄的角色, 類型段httpd_sys_content_t代表網站服務的系統文件。

搞清楚區別後,我們直接用前邊講解的semanage命令添加SELinux安全上下文即可,使其目錄及裡邊的所有文件能夠被httpd服務程式訪問到

[root@apache website]# ll -Z /var/www/html/
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html
[root@apache website]# ll -Z /website/
-rw-r--r--. root root unconfined_u:object_r:default_t:s0 index.html
[root@apache website]# semanage fcontext -a -t httpd_sys_content_t /website
[root@apache website]# semanage fcontext -a -t httpd_sys_content_t /website/*
[root@apache website]# ll -Z /website/
-rw-r--r--. root root unconfined_u:object_r:default_t:s0 index.html
[root@apache website]# restorecon -Rv /website/
restorecon reset /website context unconfined_u:object_r:default_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /website/index.html context unconfined_u:object_r:default_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
[root@apache website]# ll -Z /website/         
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html
[root@apache website]# 

需要註意的是,設置上下文值後並非立即生效,還需要執行restorecon才會生效,過程如上,請自行體驗。

經過這樣設置後,就可以正常訪問了。

在這裡插入圖片描述

本案例演示了SELinux上下文對資源的限制導致的web不能訪問,以及設置上下文值。

2.4 Apache案例2:用戶個人主頁功能

上一個案例演示了SELinux上下文的設置,本案例再通過Apache的個人用戶主頁功能來演示SELinux域的設置。

假設有這樣有一個需求:需要為Linux每一位系統用戶建立一個獨立的網站。我們該怎麼做呢?

方法有很多,httpd服務程式提供的個人用戶主頁功能完全可以實現這個需求。它可以讓系統內所有的用戶在自己的家目錄中管理個人的網站,而且訪問起來也非常容易。

步驟如下:

2.4.1 開啟個人主頁功能

個人用戶主頁功能配置文件為:/etc/httpd/conf.d/userdir.conf 。主要修改2處:註釋掉UserDir disabled使其開啟個人主頁功能,同時設置個人網站目錄,取消UserDir public_html 前的註釋即可。

[root@apache website]# vim /etc/httpd/conf.d/userdir.conf 

在這裡插入圖片描述

2.4.2 創建網站目錄及文件

在用戶家目錄中建立用於保存網站數據的目錄及首頁面文件。

[root@apache website]# useradd heima
[root@apache website]# echo "123456" | passwd --stdin heima
Changing password for user heima.
passwd: all authentication tokens updated successfully.
[root@apache website]# su - heima
[heima@apache ~]$ ls
[heima@apache ~]$ pwd
/home/heima
[heima@apache ~]$ mkdir public_html
[heima@apache ~]$ echo "this is heima's website">public_html/index.html
[heima@apache ~]$ ll public_html/
total 4
-rwxrwxr-x. 1 heima heima 24 Feb 10 16:11 index.html
[heima@apache ~]$ chmod -Rf 775 /home/heima/

另外,還需要把家目錄的許可權修改為755,保證其他人也有許可權讀取裡面的內容。

2.4.3 設置SELinux安全域策略

文章最開始已經設置了防火牆,此時我們大致一想,應該是可以訪問個人網頁了吧。我們先切換到root用戶,重啟httpd服務,然後進行訪問,結果很不幸,這次又提示許可權不足。

[root@apache ~]# systemctl restart httpd

在這裡插入圖片描述

訪問地址為ip/~用戶名,其中的波浪號是必需的,而且網址、波浪號、用戶名之間沒有空格。

我們回想一下,這個現象和案例1遇到的癥狀有幾分相似,當時是因為我們新建了一個目錄/website,而沒有設置SELinux上下文所導致。那這次是不是也是因為SELinux的上下文導致呢?

很顯然不是,httpd服務程式在提供個人用戶主頁功能時,該用戶的網站數據目錄本身就應該是存放到與這位用戶對應的家目錄中的,所以應該不需要修改家目錄的 SELinux 安全上下文,如果你實在不放心,也可以執行如下命令驗證:

[heima@apache ~]$ ll -Z /home/heima/
drwxrwxr-x. heima heima unconfined_u:object_r:httpd_user_content_t:s0 public_html
[heima@apache ~]$

對吧,很明顯不是SELinux上下文導致,因為httpd預設就給用戶目錄添加了上下文值。

那是什麼原因呢,我們還是按照之前的方法來排查,先把SELinux關閉,然後在此訪問。結果可以正常訪問了,那說明就是SELinux的問題,再回想我們前面提到的SELinux通過上下文和域這兩個方面進行限制和保護。既然上下文沒問題,因此自然而然,我們應該知道這就是SELinux域導致的。

Linux 域確保服務程式不能執行違規的操作,只能本本分分地為用戶提供服務。httpd 服務中突然開啟的這項個人用 戶主頁功能到底有沒有被SELinux域預設允許呢?

給個人主頁相關的域規則項為:httpd_enable_homedirs,如果不知道記住即可。我們看下他的狀態確實為off,因此將其改為on就可以了,切換到root用戶進行操作

[root@apache ~]# getsebool httpd_enable_homedirs
httpd_enable_homedirs --> off
[root@apache ~]# setsebool httpd_enable_homedirs=on
[root@apache ~]# 

此時,我們再次訪問,即可正常訪問了。

在這裡插入圖片描述

2.4.4 設置需要用戶密碼才能登陸

有時候我們不希望別人直接就可以訪問個人網站,需要通過身份認證才能進行查看,這就需要在網站中添加口令功能來實現。

(1)生成密碼資料庫

[root@apache ~]# htpasswd -c /etc/httpd/passed heima
New password: 
Re-type new password: 
Adding password for user heima
[root@apache ~]# 

註意,文件名任意取,在下一步中保持一致即可,-c參數表示第一次生成。設置密碼為888888,以區別之前heima用戶登錄系統的密碼123456,這樣做的目的是為了區分說明不此處設置的密碼不是用戶登錄系統的密碼。

(2)修改配置文件

[root@apache ~]# vim /etc/httpd/conf.d/userdir.conf 
<Directory "/home/*/public_html">
#    AllowOverride FileInfo AuthConfig Limit Indexes
#    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
#    Require method GET POST OPTIONS
   AllowOverride all
   authuserfile "/etc/htppd/passed"
   authname "heima website"
   authtype basic
   require user heima
   Require method GET POST OPTIONS
</Directory>

將文末的內容註釋並按如下進行修改即可

在這裡插入圖片描述

修改完成後,重啟httpd

[root@apache ~]# systemctl restart httpd

再次訪問,就要求輸入密碼了。

在這裡插入圖片描述

此時輸入用戶名heima,以及剛纔創建的888888密碼(註意不是heima登錄系統的密碼)即可登錄網站。

在這裡插入圖片描述

這個案例演示了SELinux域對進程的控制,以及如何對其進行設置。

通過案例1和案例2,不僅完整演示了Apache常用操作,還特別演示了生產級別的SELinux域和上下文的設置。

下一篇文章繼續演示Apache的虛擬主機功能和訪問控制的實現方法。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 更改顯卡配置文件 在目錄 /usr/share/X11/xorg.conf.d 下新建配置文件 10 nvidia.conf,添加如下內容: 在ubuntu18.04中 將最後兩個opyion添加到相應文件中,也可以成功 更改grub啟動參數,打開/etc/default下的grub文件 將 改為 ...
  • 壓縮相關知識常見壓縮文件擴展名:*.Z:compress程式壓縮的文件*.zip:zip程式壓縮的文件*.gz:gzip程式壓縮的文件*.bz2:bzip2程式壓縮的文件*.xz:xz程式壓縮的文件*.tar:tar程式打包的文件,並沒有壓縮過*.tar.gz:tar程式打包的文件,並且經過gzip... ...
  • ContOS7開啟ssh,實現遠程連接 1、查看確認是否已經安裝ssh服務 yum list installed | grep openssh-server 有如下輸出表示已經安裝ssh服務,可以直接去第三步ssh配置。如果什麼也沒提示說明沒有安裝,需要運行第二步安裝ssh服務。 2、安裝ssh服務 ...
  • 一 Pod和SVC網路 1.1 實踐準備及原理 Docker實現了不同的網路模式,Kubernetes也以一種不同的方式來解決這些網路模式的挑戰。本完整實驗深入剖析Kubernetes在網路層是如何實現及工作的。 實驗節點架構: 如上圖所示,Kubernetes的網路模型要求每個Node上的容器都可 ...
  • nc(netcat)實用程式幾乎可用於所有涉及TCP或UDP的事情。它可以打開TCP連接,發送UDP數據包,監聽任意TCP和UDP埠,進行埠掃描,處理IPv4和IPv6。與telnet不同,nc可以很好地編寫腳本,並將錯誤消息分離為標準錯誤,而不是像telnet一樣將錯誤消息發送至標準輸出。 語 ...
  • 環境:使用jenkins通過pipeline拉取github代碼 最近在Jenkins上新建Job時,使用Pipeline流水線方式自動化發佈項目報錯具體如下: ERROR: Timeout after 10 minutes” ERROR: Error fetching remote repo 'o ...
  • pyaudio模塊讀取設備名稱來指定相應的設備進行錄音,涉及操作系統編碼、IDE解碼等問題 ...
  • 在linux和windows中都有路由配置的方法,在日常開發中也經常遇到,比如自己公司各個網站內部開了openvpn這種應用以後,路由配置不好有可能導致改走vpn的不走,網路卡頓甚不能正常上網 1.命令格式 看不懂不要緊,看下麵常用命令那的用法 2.常用選項和參數說明 2.1 選項說明 2.2 參數 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...