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
  • Dapr Outbox 是1.12中的功能。 本文只介紹Dapr Outbox 執行流程,Dapr Outbox基本用法請閱讀官方文檔 。本文中appID=order-processor,topic=orders 本文前提知識:熟悉Dapr狀態管理、Dapr發佈訂閱和Outbox 模式。 Outbo ...
  • 引言 在前幾章我們深度講解了單元測試和集成測試的基礎知識,這一章我們來講解一下代碼覆蓋率,代碼覆蓋率是單元測試運行的度量值,覆蓋率通常以百分比表示,用於衡量代碼被測試覆蓋的程度,幫助開發人員評估測試用例的質量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage)、分支覆蓋率(Bra ...
  • 前言 本文介紹瞭如何使用S7.NET庫實現對西門子PLC DB塊數據的讀寫,記錄了使用電腦模擬,模擬PLC,自至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1.Windows環境下鏈路層網路訪問的行業標準工具(WinPcap_4_1_3.exe)下載鏈接:http ...
  • 從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(Inversion of Control, IoC)再到依賴註入(Dependency Injection, DI)的演進過程,我們可以理解為一種逐步抽象和解耦的設計思想。這種思想在C#等面向對象的編 ...
  • 關於Python中的私有屬性和私有方法 Python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對對象語言有區別。關於私有屬性和私有方法,有如下要點: 1、通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public); 2、類內部可以訪問私有屬性(方法); 3、類外 ...
  • C++ 訪問說明符 訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關鍵字。它們用於封裝類數據並保護其免受意外修改或濫用。 三種訪問說明符: public:允許從類外部的任何地方訪問成員。 private:僅允許在類內部訪問成員。 protected:允許在類內部及其派生類中訪問成員。 示 ...
  • 寫這個隨筆說一下C++的static_cast和dynamic_cast用在子類與父類的指針轉換時的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉子類、用 static_cast 子類轉父類、使用 ...
  • /******************************************************************************************************** * * * 設計雙向鏈表的介面 * * * * Copyright (c) 2023-2 ...
  • 相信接觸過spring做開發的小伙伴們一定使用過@ComponentScan註解 @ComponentScan("com.wangm.lifecycle") public class AppConfig { } @ComponentScan指定basePackage,將包下的類按照一定規則註冊成Be ...
  • 操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...