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

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

前面系列文章講解了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倉庫安裝即可

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

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

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

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

在這裡插入圖片描述

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

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

[[email protected] ~]# firewall-cmd --permanent --zone=public --add-service=http
success
[[email protected] ~]# firewall-cmd --permanent --zone=public --add-service=https
success
[[email protected] ~]# firewall-cmd --reload 
success
[[email protected] ~]#

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

在這裡插入圖片描述

  • 查看httpd版本信息:
[[email protected] ~]# httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built:   Aug  8 2019 11:41:18
[[email protected] ~]# 
  • 查看httpd運行狀態
[[email protected] ~]# 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。

打開主配置文件

[[email protected] ~]# vim /etc/httpd/conf/httpd.conf 

在這裡插入圖片描述

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

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

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

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

在這裡插入圖片描述

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

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

2.2 SELinux相關知識

2.2.1 問題引出

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

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

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

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

[[email protected] website]# vim /etc/httpd/conf/httpd.conf 

在這裡插入圖片描述

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

(3)訪問驗證

配置完成後,重啟httpd服務

[[email protected] website]# systemctl restart httpd

在宿主機中瀏覽器查看

在這裡插入圖片描述

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

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

我們在加上文件名試下呢

在這裡插入圖片描述

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

[[email protected] website]# getenforce 
Enforcing
[[email protected] website]# setenforce 0
[[email protected] website]# getenforce  
Permissive
[[email protected] 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 。

[[email protected] 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 
[[email protected] website]# 

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

2.2.2 SELinux相關命令
  • getenforce命令

用於查看SELinux的運行模式

[[email protected] website]# getenforce 
Enforcing
[[email protected] website]# 
  • setenforece命令

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

[[email protected] website]# getenforce 
Enforcing
[[email protected] website]# setenforce 0
[[email protected] website]# getenforce  
Permissive
[[email protected] website]

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

  • semanage命令

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

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

參數

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

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

  • getseboll命令

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

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

[[email protected] ~]# getsebool 
usage:  getsebool -a or getsebool boolean...
[[email protected] ~]# 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參數表示立即讓修改永久生效)

[[email protected] ~]# getsebool -a | grep xdm_write_home
xdm_write_home --> off
[[email protected] ~]# setsebool -P xdm_write_home=on
[[email protected] ~]# getsebool -a | grep xdm_write_home
xdm_write_home --> on
[[email protected] ~]# setsebool -P xdm_write_home=off
[[email protected] ~]# getsebool -a | grep xdm_write_home
xdm_write_home --> off
[[email protected] ~]# getsebool xdm_write_home
xdm_write_home --> off

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

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

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

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

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

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

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

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

[[email protected] website]# ll -Z /var/www/html/
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html
[[email protected] website]# ll -Z /website/
-rw-r--r--. root root unconfined_u:object_r:default_t:s0 index.html
[[email protected] website]# semanage fcontext -a -t httpd_sys_content_t /website
[[email protected] website]# semanage fcontext -a -t httpd_sys_content_t /website/*
[[email protected] website]# ll -Z /website/
-rw-r--r--. root root unconfined_u:object_r:default_t:s0 index.html
[[email protected] 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
[[email protected] website]# ll -Z /website/         
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html
[[email protected] 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 前的註釋即可。

[[email protected] website]# vim /etc/httpd/conf.d/userdir.conf 

在這裡插入圖片描述

2.4.2 創建網站目錄及文件

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

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

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

2.4.3 設置SELinux安全域策略

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

[[email protected] ~]# systemctl restart httpd

在這裡插入圖片描述

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

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

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

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

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

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

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

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

[[email protected] ~]# getsebool httpd_enable_homedirs
httpd_enable_homedirs --> off
[[email protected] ~]# setsebool httpd_enable_homedirs=on
[[email protected] ~]# 

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

在這裡插入圖片描述

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

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

(1)生成密碼資料庫

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

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

(2)修改配置文件

[[email protected] ~]# 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

[[email protected] ~]# systemctl restart httpd

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

在這裡插入圖片描述

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

在這裡插入圖片描述

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

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

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


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

更多相關文章
  • 更改顯卡配置文件 在目錄 /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 參數 ...
一周排行
  • 一:背景 1. 講故事 曾今在項目中發現有同事自定義結構體的時候,居然沒有重寫Equals方法,比如下麵這段代碼: static void Main(string[] args) { var list = Enumerable.Range(0, 1000).Select(m => new Point ...
  • 最近一個朋友有個關於素數的小東西要寫一下,素數是什麼呢?除了1和他本身不能被其他數整除,那麼這個數就是素數,1除外哦。我們知道概念那就很簡單了,直接代碼擼起。 ...
  • 前言 在開發編程中,我們經常會遇到功能非常相似的功能模塊,只是他們的處理的數據不一樣,所以我們會分別採用多個方法來處理不同的數據類型。但是這個時候,我們就會想一個問題,有沒有辦法實現利用同一個方法來傳遞不同種類型的參數呢? 這個時候,泛型也就因運而生,專門來解決這個問題的。 泛型是在C 2.0就推出 ...
  • 本文章主要用於介紹在Asp.Net Mvc(C#)中使用Fleck製作一個Html5的即時聊天室,含有完整代碼和演示Demo。 ...
  • 出庫單的功能。能學習了出庫單管理之後,WMS的 主體功能算是完成了。當然一個成熟的WMS還包括了盤點,報表,策略規則,移庫功能及與其他系統(ERP、TMS等)的介面,實現無縫集成,打破信息孤島,讓數據實時、準確和同步。 ...
  • Data StructureThere're two types of variables in C#, reference type and value type.Enum:enum Color{Red=0,Green=1}//equals to enum Color{Red,//start fr... ...
  • 0. 前言 該項目使用Maven進行管理和構建,所以需要預先配置好Maven。嗯,在這個系列里就不做過多的介紹了。 1. 創建項目 先創建一個pom.xml 文件,添加以下內容: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http: ...
  • API 概述 API(Application Programming Interface),應用程式編程介面。 Java API是一本程式員的 字典 ,是JDK中提供給我們使用的類的說明文檔。 這些類將底層的代碼實現封裝了起來,我們不需要關心這些類是如何實現的,只需要學習這些類如何使用即可。 所以我 ...
  • 女程式員是這麼徵婚的: SELECT * FROM 男人們 WHERE 未婚=true and 同性戀=false and 有房=true and 有車=true and 條件 in (帥氣,紳士,大度,氣質,智慧,溫柔,體貼,會浪漫,活潑,可愛,最好還能帶孩子) and 年齡 between(24 ...
  • 有很多剛學習軟體測試的小伙伴,都會在網路上找尋各種學習資料,去提升自己的專業技能水平。因此,我決定定期分享我整理收集的一些軟體測試的測試工具下載、面試寶典、視頻教學合集。都整理好了,有需要的可以關註我(獲取方式在文末) 軟體測試的學習,不止是基礎理論,還需要學習測試工具的用法,如介面工具Postma ...