命令:curl
在Linux中curl是一個利用URL規則在命令行下工作的文件傳輸工具,可以說是一款很強大的http命令行工具。它支持文件的上傳和下載,是綜合傳輸工具,但按傳統,習慣稱url為下載工具。
語法:# curl [option] [url]
常見參數:
-A/--user-agent 設置用戶代理發送給伺服器
-b/--cookie
-c/--cookie-jar 操作結束後把cookie寫入到這個文件中
-C/--continue-at 斷點續轉
-D/--mp-header 把header信息寫入到該文件中
-e/--referer 來源網址
-f/--fail 連接失敗時不顯示http錯誤
-o/--output 把輸出寫到該文件中
-O/--remote-name 把輸出寫到該文件中,保留遠程文件的文件名
-r/--range 檢索來自HTTP/1.1或FTP伺服器位元組范圍
-s/--silent 靜音模式。不輸出任何東西
-T/--upload-file 上傳文件
-u/--user
-w/--write-out [format] 什麼輸出完成後
-x/--proxy
-#/--progress-bar 進度條顯示當前的傳送狀態
例子:
1、基本用法
代碼如下:
# curl http://www.linux.com
執行後,www.linux.com 的html就會顯示在屏幕上了
Ps:由於安裝linux的時候很多時候是沒有安裝桌面的,也意味著沒有瀏覽器,因此這個方法也經常用於測試一台伺服器是否可以到達一個網站
2、保存訪問的網頁
2.1:使用linux的重定向功能保存
代碼如下:
# curl http://www.linux.com linux.html
2.2:可以使用curl的內置option:-o(小寫)保存網頁
代碼如下:
$ curl -o linux.html http://www.linux.com
執行完成後會顯示如下界面,顯示100%則表示保存成功
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 79684 0 79684 0 0 3437k 0 --:--:-- --:--:-- --:--:-- 7781k
2.3:可以使用curl的內置option:-O(大寫)保存網頁中的文件
要注意這里後面的url要具體到某個文件,不然抓不下來
代碼如下:
# curl -O http://www.linux.com/hello.sh
3、測試網頁返回值
代碼如下:
# curl -o /dev/null -s -w %{http_code} www.linux.com
Ps:在腳本中,這是很常見的測試網站是否正常的用法
4、指定proxy伺服器以及其埠
很多時候上網需要用到代理伺服器(比如是使用代理伺服器上網或者因為使用curl別人網站而被別人屏蔽IP地址的時候),幸運的是curl通過使用內置option:-x來支持設置代理
代碼如下:
# curl -x 192.168.100.100:1080 http://www.linux.com
5、cookie
有些網站是使用cookie來記錄session信息。對於chrome這樣的瀏覽器,可以輕易處理cookie信息,但在curl中只要增加相關參數也是可以很容易的處理cookie
5.1:保存http的response裡面的cookie信息。內置option:-c(小寫)
代碼如下:
# curl -c cookiec.txt http://www.linux.com
執行後cookie信息就被存到了cookiec.txt裡面了
5.2:保存http的response裡面的header信息。內置option: -D
代碼如下:
# curl -D cookied.txt http://www.linux.com
執行後cookie信息就被存到了cookied.txt裡面了
注意:-c(小寫)產生的cookie和-D裡面的cookie是不一樣的。
5.3:使用cookie
很多網站都是通過監視你的cookie信息來判斷你是否按規矩訪問他們的網站的,因此我們需要使用保存的cookie信息。內置option: -b
代碼如下:
# curl -b cookiec.txt http://www.linux.com
6、模仿瀏覽器
有些網站需要使用特定的瀏覽器去訪問他們,有些還需要使用某些特定的版本。curl內置option:-A可以讓我們指定瀏覽器去訪問網站
代碼如下:
# curl -A "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.0)" http://www.linux.com
這樣伺服器端就會認為是使用IE8.0去訪問的
7、偽造referer(盜鏈)
很多伺服器會檢查http訪問的referer從而來控制訪問。比如:你是先訪問首頁,然後再訪問首頁中的郵箱頁面,這里訪問郵箱的referer地址就是訪問首頁成功後的頁面地址,如果伺服器發現對郵箱頁面訪問的referer地址不是首頁的地址,就斷定那是個盜連了
curl中內置option:-e可以讓我們設定referer
代碼如下:
# curl -e "www.linux.com" http://mail.linux.com
這樣就會讓伺服器其以為你是從www.linux.com點擊某個鏈接過來的
8、下載文件
8.1:利用curl下載文件。
代碼如下:
#使用內置option:-o(小寫)
# curl -o dodo1.jpg http:www.linux.com/dodo1.JPG
#使用內置option:-O(大寫)
# curl -O http://www.linux.com/dodo1.JPG
這樣就會以伺服器上的名稱保存文件到本地
8.2:循環下載
有時候下載圖片可以能是前面的部分名稱是一樣的,就最後的尾椎名不一樣
代碼如下:
# curl -O http://www.linux.com/dodo[1-5].JPG
這樣就會把dodo1,dodo2,dodo3,dodo4,dodo5全部保存下來
8.3:下載重命名
代碼如下:
# curl -O http://www.linux.com/{hello,bb}/dodo[1-5].JPG
由於下載的hello與bb中的文件名都是dodo1,dodo2,dodo3,dodo4,dodo5。因此第二次下載的會把第一次下載的覆蓋,這樣就需要對文件進行重命名。
代碼如下:
# curl -o #1_#2.JPG http://www.linux.com/{hello,bb}/dodo[1-5].JPG
這樣在hello/dodo1.JPG的文件下載下來就會變成hello_dodo1.JPG,其他文件依此類推,從而有效的避免了文件被覆蓋
8.4:分塊下載
有時候下載的東西會比較大,這個時候我們可以分段下載。使用內置option:-r
復制代碼
代碼如下:
# curl -r 0-100 -o dodo1_part1.JPG http://www.linux.com/dodo1.JPG
# curl -r 100-200 -o dodo1_part2.JPG http://www.linux.com/dodo1.JPG
# curl -r 200- -o dodo1_part3.JPG http://www.linux.com/dodo1.JPG
# cat dodo1_part* dodo1.JPG
這樣就可以查看dodo1.JPG的內容了
8.5:通過ftp下載文件
curl可以通過ftp下載文件,curl提供兩種從ftp中下載的語法
代碼如下:
# curl -O -u 用戶名:密碼 ftp://www.linux.com/dodo1.JPG
# curl -O ftp://用戶名:密碼@www.linux.com/dodo1.JPG
8.6:顯示下載進度條
代碼如下:
# curl -# -O http://www.linux.com/dodo1.JPG
8.7:不會顯示下載進度信息
代碼如下:
# curl -s -O http://www.linux.com/dodo1.JPG
9、斷點續傳
在windows中,我們可以使用迅雷這樣的軟體進行斷點續傳。curl可以通過內置option:-C同樣可以達到相同的效果
如果在下載dodo1.JPG的過程中突然掉線了,可以使用以下的方式續傳
復制代碼
代碼如下:
# curl -C -O http://www.linux.com/dodo1.JPG
10、上傳文件
curl不僅僅可以下載文件,還可以上傳文件。通過內置option:-T來實現
復制代碼
代碼如下:
# curl -T dodo1.JPG -u 用戶名:密碼 ftp://www.linux.com/img/
這樣就向ftp伺服器上傳了文件dodo1.JPG
11、顯示抓取錯誤
復制代碼
代碼如下:
# curl -f http://www.linux.com/error
其他參數(此處翻譯為轉載):
-a/--append 上傳文件時,附加到目標文件
--anyauth 可以使用「任何」身份驗證方法
--basic 使用HTTP基本驗證
-B/--use-ascii 使用ASCII文本傳輸
-d/--data HTTP POST方式傳送數據
--data-ascii 以ascii的方式post數據
--data-binary 以二進制的方式post數據
--negotiate 使用HTTP身份驗證
--digest 使用數字身份驗證
--disable-eprt 禁止使用EPRT或LPRT
--disable-epsv 禁止使用EPSV
--egd-file 為隨機數據(SSL)設置EGD socket路徑
--tcp-nodelay 使用TCP_NODELAY選項
-E/--cert
--cert-type 證書文件類型 (DER/PEM/ENG) (SSL)
--key 私鑰文件名 (SSL)
--key-type 私鑰文件類型 (DER/PEM/ENG) (SSL)
--pass 私鑰密碼 (SSL)
--engine 加密引擎使用 (SSL). "--engine list" for list
--cacert CA證書 (SSL)
--capath CA目 (made using c_rehash) to verify peer against (SSL)
--ciphers SSL密碼
--compressed 要求返回是壓縮的形勢 (using deflate or gzip)
--connect-timeout 設置最大請求時間
--create-dirs 建立本地目錄的目錄層次結構
--crlf 上傳是把LF轉變成CRLF
--ftp-create-dirs 如果遠程目錄不存在,創建遠程目錄
--ftp-method [multicwd/nocwd/singlecwd] 控制CWD的使用
--ftp-pasv 使用 PASV/EPSV 代替埠
--ftp-skip-pasv-ip 使用PASV的時候,忽略該IP地址
--ftp-ssl 嘗試用 SSL/TLS 來進行ftp數據傳輸
--ftp-ssl-reqd 要求用 SSL/TLS 來進行ftp數據傳輸
-F/--form
-form-string
-g/--globoff 禁用網址序列和范圍使用{}和[]
-G/--get 以get的方式來發送數據
-h/--help 幫助
-H/--header 自定義頭信息傳遞給伺服器
--ignore-content-length 忽略的HTTP頭信息的長度
-i/--include 輸出時包括protocol頭信息
-I/--head 只顯示文檔信息
-j/--junk-session-cookies 讀取文件時忽略session cookie
--interface 使用指定網路介面/地址
--krb4 使用指定安全級別的krb4
-k/--insecure 允許不使用證書到SSL站點
-K/--config 指定的配置文件讀取
-l/--list-only 列出ftp目錄下的文件名稱
--limit-rate 設置傳輸速度
--local-port 強制使用本地埠號
-m/--max-time 設置最大傳輸時間
--max-redirs 設置最大讀取的目錄數
--max-filesize 設置最大下載的文件總量
-M/--manual 顯示全手動
-n/--netrc 從netrc文件中讀取用戶名和密碼
--netrc-optional 使用 .netrc 或者 URL來覆蓋-n
--ntlm 使用 HTTP NTLM 身份驗證
-N/--no-buffer 禁用緩沖輸出
-p/--proxytunnel 使用HTTP代理
--proxy-anyauth 選擇任一代理身份驗證方法
--proxy-basic 在代理上使用基本身份驗證
--proxy-digest 在代理上使用數字身份驗證
--proxy-ntlm 在代理上使用ntlm身份驗證
-P/--ftp-port
使用埠地址,而不是使用PASV
-Q/--quote 文件傳輸前,發送命令到伺服器
--range-file 讀取(SSL)的隨機文件
-R/--remote-time 在本地生成文件時,保留遠程文件時間
--retry 傳輸出現問題時,重試的次數
--retry-delay 傳輸出現問題時,設置重試間隔時間
--retry-max-time 傳輸出現問題時,設置最大重試時間
-S/--show-error 顯示錯誤
--socks4
--socks5
-t/--telnet-option
--trace 對指定文件進行debug
--trace-ascii Like --跟蹤但沒有hex輸出
--trace-time 跟蹤/詳細輸出時,添加時間戳
--url Spet URL to work with
-U/--proxy-user
-V/--version 顯示版本信息
-X/--request 指定什麼命令
-y/--speed-time 放棄限速所要的時間。默認為30
-Y/--speed-limit 停止傳輸速度的限制,速度時間'秒
-z/--time-cond 傳送時間設置
-0/--http1.0 使用HTTP 1.0
-1/--tlsv1 使用TLSv1(SSL)
-2/--sslv2 使用SSLv2的(SSL)
-3/--sslv3 使用的SSLv3(SSL)
--3p-quote like -Q for the source URL for 3rd party transfer
--3p-url 使用url,進行第三方傳送
--3p-user 使用用戶名和密碼,進行第三方傳送
-4/--ipv4 使用IP4
-6/--ipv6 使用IP6
使用curl命令獲取文件下載速度
使用curl可以下載網路內容,那如何獲取curl下載時的下載速度呢,使用下面的命令即可:
復制代碼
代碼如下:
# curl -Lo /dev/null -skw "%{speed_download}n" http://mirrors.163.com/ubuntu/ls-lR.gz
226493.000
當然,還可以獲取連接時間、重定向時間等更多的數據:
復制代碼
代碼如下:
# curl -Lo /dev/null -skw "time_connect: %{time_connect} sntime_namelookup: %{time_namelookup} sntime_pretransfer: %{time_pretransfer} sntime_starttransfer: %{time_starttransfer} sntime_redirect: %{time_redirect} snspeed_download: %{speed_download} B/sntime_total: %{time_total} snn" http://www.sina.com
time_connect: 0.154 s
time_namelookup: 0.150 s
time_pretransfer: 0.154 s
time_starttransfer: 0.163 s
time_redirect: 0.157 s
speed_download: 324679.000 B/s
time_total: 1.692 s
② 簡述設置http重定向的步驟(網站重定向代碼)
一、什麼是301重定向
301重定向(或叫301跳轉、301轉向)是用戶或搜索引擎蜘蛛向網站伺服器發出訪問請求時,服務返回的HTTP數據流中頭信息(header)部分狀態碼的一種,表示本網址永久性轉移到另一個地址。其他常見的狀態碼還包括:200(表示一切正常);404(網頁不存在);302(臨時性轉向);500 (內部程序錯誤);
除了301轉向,網址轉向還有其他方法,如302轉向、JavaScript轉向、PHP/ASP/CGI程序轉向、Meta Refresh等。
301重定向對搜索引擎優化具有不可替代的作用。用301重定向鞏固規范版本的URL,重拾權重,防止搜索結果的重復內容。從搜索引擎優化角度出發,301重定向是網址重定向最為可行的一種辦法。
二、什麼情況下使用301重定向
網站改版經常需要用到301重定向:如網站更換域名,改變網頁目錄結構,網頁被移到一個新地址,網頁擴展名改變,如因需要把 .php 改成 .html。在這種情況下,如果不做重定向,則用戶收藏夾或搜索引擎資料庫中舊地址只能讓訪問客戶還會得到一個404頁面錯誤信息,訪問流量白白喪失。使用301重定向不僅能使頁面實現自動跳轉,告訴用戶你已經換了新的網址了。同時也告訴搜索引擎,這個才是真正的網址,搜索引擎只對重定向後的新網址進行索引,同時又會把舊地址權重如數轉移到新地址下,從而不會讓網站的排名因為網址變更而受到影響。
一個網站注冊了多個域名,需要通過301重定向讓訪問這些域名的用戶自動跳轉到其中一個主域名。這樣做是為了避免造成大量復制內容,而遭到搜索引擎懲罰。因為在搜索引擎看來,每個域名都是一個獨立的站,多個域名指向同一站,會被認定為站點雷同,內容復制,輕則不收錄進入沙盒期,重則直接被K。
實現網址規范化也需要301重定向
假設有下面幾個網址:
https://www.dongrv.com/index.html
https://dongrv.com
https://dongrv.com/index.html
都做301重定向到 https://www.dongrv.com(選定的規范化網址),搜索引擎就知道https://www.dongrv.com是規范化網址,而且會把上面列的網址權重傳遞集中到規范化網址。
目前Google會傳遞大部分權重,但不是百分之百權重。網路會傳遞所有權重。Google對301的識別、反應、完成權重傳遞,需要1~3個月時間。網路對301處理則比較保守,新舊URL會同時存在於資料庫很長時間。
三、Apache伺服器實現301重定向
如果網站使用LAMP(Linux + Apache + MySQL + PHP)主機,可以利用Apache的mod_rewrite對URL進行重寫或重定向。需要以下幾步:
1、首先確保開啟了mod_rewrite功能。
用文本編輯器打開Apache安裝目錄confhttpd.conf,找到#LoadMole rewrite_mole moles/mod_rewrite.so這行,去掉前面的#;
繼續查找AllowOverride None,修改為AllowOverride All;
然後,重啟Apache即可。
2、在你需要URL重定向的網站根目錄下放一個.htaccess文件,文件名是.htaccess,Windows下不能直接建立,你可以用記事本另存為。
3、在.htaccess中通過正則表達式重定向到需要的頁面。示例如下:
將不帶www的頂級域名301重定向到帶www的域名
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^dongrv.com [NC]
RewriteRule ^(.*)$ https://www.dongrv.com/$1 [L,R=301]
將頁面301重定向到另外一個頁面
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^/oldpage.html$ /newpage.html[NC,L,R=301]
四、IIS伺服器下做301重定向設置方法
示例:將dongrv.com 跳轉到www.dongrv.com
1、新建一個站點,對應目錄如d:site。該站點主要用於轉向,目錄可以是空的,不需要任何文件。然後為該站點綁定要跳轉的域名dongrv.com,如圖:
2、在IIS中選中剛才我們建立的站點,右鍵,屬性,主目錄,選擇重定向到,輸入另一個綁定好www.dongrv.com域名的網站地址(這個網站下存放有網站內容)。輸入的地址是:https://www.dongrv.com$S$Q,同時注意選中下面的資源的永久重定向選項 和 上面輸入的准確URL 這2個選項。如下圖:
對於$S$Q字元,這里解釋一下:
$S 將請求的URL的後綴傳遞給新的URL。後綴是用重定向的URL 代替之後,初始URL 中所保留的部分。
如果未選中 上面輸入的准確URL 選項,則結果目標URL 的名稱將具有所請求文件的名稱(作為文件夾名稱)以及文件名本身。
$Q 將初始URL中的參數(如 querystring 參數)傳遞至新的 URL,包括問號(?)。
如果不加上 $S$Q 字元的話,內頁的301都會跳轉到首頁,加上$S$Q字元的目的就是內頁也能准確的跳轉到新域名的對應內頁。
好了,這樣就完成了301永久重定向的設置,設置好之後最好能測試一下301重定向是否成功。站長工具的HTTP狀態工具(https://tool.chinaz.com/pagestatus/)即可查到,如果查到的返回狀態是301就說明你已經成功了。
五、使用ISAPI_Rewrite實現IIS的301重定向
ISAPI_Rewrite是用於IIS的第三方URL重寫組件。它是基於正則表達式的,類似Apache mod_rewrite功能,不僅可以實現URL重寫,還可以實現301重定向。
ISAPI_Rewrite組件有免費版(Lite)以及商業版(Full),免費版只支持全局httpd.conf 配置,不能對每個站點進行單獨設置,而商業版可以讓每個站點自定義URL重寫規則,只要將httpd.ini 放在站點根目錄下就能生效。
請使用 ISAPI_Rewrite 2.x 或者 最新的3.0 版本(它兼容Apache的mod_rewrite的語法),而較早的1.x 版本不支持301重定向功能。
下面給出示例:
1. 將不帶www的頂級域名301重定向到帶www的域名
# ISAPI_Rewrite 2.x 版本
[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
RewriteCond Host: ^dongrv.com$
RewriteRule (.*) https://www.dongrv.com$1 [I,RP]
# ISAPI_Rewrite 3.0 版本
[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
RewriteCond %{HTTP:Host} ^dongrv.com$
RewriteRule (.*) https://www.dongrv.com$1 [NC,R=301]
2. 不同域名之間的301轉向
# ISAPI_Rewrite 2.x 版本
[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
RewriteCond Host ^www.test10000.com$
RewriteRule (.*) https://www.dongrv.com$1 [I,RP]
# ISAPI_Rewrite 3.0 版本
[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
RewriteCond %{HTTP:Host} ^www.test10000.com$
RewriteRule (.*) https://www.dongrv.com$1 [NC,R=301]
3. 將頁面301重定向到另外一個頁面
# ISAPI_Rewrite 2.x 版本
[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
RewriteRule ^/oldpage.html$ /newpage.html[I,O,RP,L]
# ISAPI_Rewrite 3.0 版本
[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
RewriteRule ^/oldpage.html$ /newpage.html[NC,L,R=301,O]
六、在網頁後台程序中實現301重定向
如果頁面是ASP/PHP/JSP/ASP.NET 可以再後台代碼中做301重定向。
但是我個人不推薦這樣,因為在伺服器上做301跳轉是在你的頁面執行之前就開始跳轉,效率高。而程序代碼中做301,要為每個頁面頭部加轉向代碼,比較麻煩。
示例如下:
1、PHP下的301重定向
<!--?
Header(HTTP/1.1 301 Moved Permanently);
Header(Location: https://www.dongrv.com);
?
2、ASP下的301重定向
%@ Language=VBScript %
%
Response.Status = 301 Moved Permanently
Response.AddHeader Location, https://www.dongrv.com
%
3、ASP .NET下的301重定向
script runat="server">
private void Page_Load(object sender, System.EventArgs e)
{
Response.Status = "301 Moved Permanently";
Response.AddHeader ("Location", "https://www.admin10000.com");
}
/script
4、JSP下的301重定向
%
response.setStatus(301);
response.setHeader(Location, https://www.dongrv.com);
response.setHeader(Connection, close);
%
提示:如果返回報頭中只有Location,但沒有明確提到狀態代碼時,就意味著一個302臨時重定向。請謹記於心。例如下面都是302重定向:
PHP 下的302重定向
<!--?
php header(Location: https://www.dongrv.com);
?
Asp 下的302重定向
%
Response.Redirect https://www.dongrv.com/
%
ASP.NET 302重定向
script runat="server">
private void Page_Load(object sender, System.EventArgs e)
{
Response.Redirect("https://www.admin10000.com");
}
/script
JSP 下的302重定向
%
response.sendRedirect(https://www.dongrv.com);
%
總結:301重定向是一種對搜索引擎最友好的網址轉向方法。在眾多重定向技術中,301永久性重定向是最為安全的一種途徑,也是極為理想的一款解決方案。無論是URL永久性改變,還是多種格式URL規范化都離不開301重定向。
③ linux mail伺服器怎麼用
一、概述:
在配置郵件伺服器之前,先解釋幾個概念。
通常使用Email都很容易,但是Internet的郵件系統是通過幾個復雜的部分連接而成的,對於最終用戶而言,我們熟悉的Outlook,Foxmail等都是用來收信和發信的,稱之為MUA:Mail User Agent,郵件用戶代理。
MUA並非直接將郵件發送至收件人手中,而是通過MTA:Mail Transfer Agent,郵件傳輸代理代為傳遞,Sendmail和Postfix就是扮演MTA的角色。
一封郵件從MUA發出後,可能通過一個或多個MTA傳遞,最終到達MDA:Mail Delivery Agent,郵件投遞代理,郵件到達MDA後,就存放在某個文件或特殊的資料庫里,我們將這個長期保存郵件的地方稱之為郵箱。
一旦郵件到達郵箱,就原地不動了,等用戶再通過MUA將其取走,就是用Outlook,Foxmail等軟體收信的過程。
所以一封郵件的流程是:
發件人:MUA --發送--> MTA -> 若干個MTA... -> MTA -> MDA <--收取-- MUA:收件人
MUA到MTA,以及MTA到MTA之間使用的協議就是SMTP協議,而收郵件時,MUA到MDA之間使用的協議最常用的是POP3或IMAP。
需要注意的是,專業郵件服務商都有大量的機器來為用戶服務,所以通常MTA和MDA並不是同一台伺服器,因此,在Outlook等軟體里,我們需要分別填寫SMTP發送伺服器的地址和POP3接收伺服器的地址。
Linux系統下郵件伺服器的搭建(Postfix+Dovecot)
對於網站來說,發送各種例如注冊通知的郵件是很基本的一個需求,之前我一直用的是騰訊的企業郵箱,感覺挺方便的,直接可以綁定QQ郵箱接收郵件,網站配置一下SMTP也就可以發出郵件。
但是在前幾天由於有重要信息需要立即通知用戶,所以選擇了群發郵件的方式。在當我以為一切都是辣么完美的時候,陸續有用戶過來問我什麼情況,我都會跟他們說請查收郵件,但是有好幾個人說並沒有任何
郵件,於是我試著再發一次,結果返回了錯誤提示。在網上找了下原因,後來看到這個:各大免費郵箱郵件群發賬戶SMTP伺服器配置及SMTP發送量限制情況,才知道是因為發信數量限制了。
所以只好另尋出路了,然後我在知乎上面找到了很多個提供郵件發送的服務商,大概有這些:SendGrid、MailChimp、Amazon SES、SendCloud、Mailgun等等,在看了不少人的建議之後,我選擇了Mailgun。
Mailgun注冊和配置都挺簡單,很快我就成功的發出了第一封郵件,懷著這封欣喜,我又發送了幾封郵件,可是悲劇發生在第三封郵件,Mailgun後台有詳細的發送記錄,這個非常不錯,在後台我看到我的郵件被拒收了,原因大概是該伺服器IP的發信頻率超過騰訊郵箱限制。所以這里就涉及到IP的問題,目前第三方的郵件發送服務普遍都是共享IP(後面還試過SendCloud、),而共享IP並不能確定是否已經達到接收方的數量限制,一旦達到了就無法再發送。這就是說還需要使用獨立IP才能保證郵件有較高的到達率,接著就看了各家的獨立IP價格,一般都是二十幾甚至四十幾美刀一個月,這對於我們這種小站長郵件需求不高的來說確實有點貴,買台VPS都不用這個價吧。
經過上面這些折騰,也算明白了如果要想順暢的發出郵件的話,除了花錢,就只有自己搭建一個郵件伺服器了。
好了,下面開始進入正題,教你搭建一個簡單的郵件伺服器。
用於搭建的伺服器信息
阿里雲 Centos 6.5 32位
Postfix-2.8.12.tar.gz Postfix MTA(郵件傳輸代理)
Dovecot-2.1.8.tar.gz IMAP 和 POP3 郵件伺服器
Postfixadmin-2.3.5.tar.gz 採用PHP編寫的開源WEB郵箱及域名賬號管理工具
Roundcubemail-0.8.1.tar.gz 採用php編寫的開源IMAP郵件WEB客戶端
安裝過程
1.安裝Postfix
yum -y install postfix
安裝完成還需要替換系統自帶的sendmail:
rpm -e sendmail
或者
yum remove sendmail
修改MTA(默認郵件傳輸代理)
alternatives --config mta
然後直接回車即可。
檢查一下是不是已經設置成功了。
alternatives --display mta
第一行可以看到mta的狀態。 例如:mat - status is manual.
2.安裝Dovecot
yum -y install dovecot
3.配置Postfix
編輯/etc/postfix/main.cf,可以下載下來修改,也可以使用vi進行編輯:
vi /etc/postfix/main.cf
修改如下:
# 75行: 取消注釋,設置hostname
myhostname = mail.lomu.me
# 83行: 取消注釋,設置域名
mydomain = lomu.me
# 99行: 取消注釋
myorigin = $mydomain
# 116行: 修改
inet_interfaces = all
# 119行: 推薦ipv4,如果支持ipv6,則可以為all
inet_protocols = ipv4
# 164行: 添加
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
# 264行: 取消注釋,指定內網和本地的IP地址范圍
mynetworks = 127.0.0.0/8, 10.0.0.0/24
# 419行: 取消注釋,郵件保存目錄
home_mailbox = Maildir/
# 571行: 添加
smtpd_banner = $myhostname ESMTP
# 添加到最後
# 規定郵件最大尺寸為10M
message_size_limit = 10485760
# 規定收件箱最大容量為1G
mailbox_size_limit = 1073741824
# SMTP認證
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions = permit_mynetworks,permit_auth_destination,permit_sasl_authenticated,reject
修改好了之後使用/etc/rc.d/init.d/postfix start開啟postfix,使用chkconfig postfix on將postfix開機啟動。
4.配置Dovecot
修改如下:
[root@mail ~]# vi /etc/dovecot/dovecot.conf
# 26行: 如果不使用IPv6,請修改為*
listen = *
[root@mail ~]# vi /etc/dovecot/conf.d/10-auth.conf
# 9行: 取消注釋並修改
disable_plaintext_auth = no
# 97行: 添加
auth_mechanisms = plain login
[root@mail ~]# vi /etc/dovecot/conf.d/10-mail.conf
# 30行: 取消注釋並添加
mail_location = maildir:~/Maildir
[root@mail ~]# vi /etc/dovecot/conf.d/10-master.conf
# 88-90行: 取消注釋並添加
# Postfix smtp驗證
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
[root@mail ~]# /etc/rc.d/init.d/dovecot start
Starting Dovecot Imap: [ OK ]
[root@mail ~]# chkconfig dovecot on
到這里,我們的郵件伺服器就已經搭建成功了。
5.域名解析
最後別忘了還需要進行域名解析工作。
添加一個子域名mail,A記錄解析到伺服器IP。
再添加一個MX記錄,主機記錄為空,記錄值為上面解析的二級域名mail.lomu.me,優先順序10。
注意:解析生效可能需要一段時間。
6.防火牆設置
/sbin/iptables -A INPUT -p tcp --dport 25 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 110 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 143 -j ACCEPT
突破封鎖25口的轉發
/sbin/iptables -t nat -A PREROUTING -p tcp -m tcp --dport 10025 -j REDIRECT --to-ports 25
7.郵箱使用
一切都弄好以後,就可以使用Foxmail等第三方軟體來收發郵件了。在這里需要說一下,系統用戶就是郵件的用戶,例如root,就是一個郵箱用戶,郵箱是[email protected],密碼就是root的密碼,所以需要創建用戶,只要使用useradd創建用戶,再使用passwd設置密碼。
好了,假如我們創建一個admin的用戶:
# 創建用戶
useradd admin
#設置密碼,會要求輸入兩次密碼
passwd admin
接下來登錄Foxmail,如圖:
點擊創建,進入:
這里需要注意,郵件賬號是admin,並不是郵箱,另外我們沒有配置SSL,所以也不要勾選。 接下來點擊創建,如果一切正常的話,你已經成功了。
④ linux下配置apache同時支持 php cgi
安裝LINUX時如果安裝了PERL 那麼裝上LINUX立刻可以執行CGI 只要在HTTPD.CONF裡面允許了CGI 一般默認安裝都可以
PHP你到php.net下載PHP 編譯安裝後 修改HTTPD.CONF 添加相關擴展就可以了
------------------------------------------------------------
說得比較不詳細 轉一個帖
------------------------------------------------------------
Linux+Apache+Mysql+PHP典型配置
版權聲明:可以任意轉載,轉載時請務必以超鏈接形式標明文章原始出處和作者信息及本聲明
http://www.5ilinux.com/lamp01.html
關鍵字:apache+mysql+php apache mysql php 配置 lamp 伺服器 web
Linux+Apache+Mysql+PHP典型配置
調試環境:Redhat9.0 Apache1.3.29 Mysql3.23.58 PHP4.3.4
Linux系統的安裝我就不講了,這是基本功,其實這篇文章在類似Redhat的其他linux也應該通用,大家只要掌握我提供的方法就行。記得安裝Redhat9。0的時候不要安裝系統默認的apache,mysql和php以及相關的軟體。已經安裝的請用rpm -e * 刪除已經安裝的包。
1.安裝Mysql3.23.58
其實老實說直接安裝Mysql官方網站提供的rpm包也是一個比較可行的辦法,他的官方網站的rpm包的提供基本跟tar包發行是同步的,這點我比較喜歡,至少安裝rpm包的在後面的調試中不會出現mysql庫文件找不到的情況。但這里還是有必要講一下自定義安裝的步驟,畢竟網友自定義安裝的還說挺多的。
軟體獲取:http://www.mysql.com/downloads/index.html
安裝步驟:
tar zxvf mysql-3.23.58.tar.gz
cd mysql-3.23.58
./configure --prefix=/usr/local/mysql --sysconfdir=/etc --localstatedir=/var/lib/mysql
make
make install
#prefix=/usr/local/mysql mysql安裝的目標目錄
#sysconfdir=/etc my.ini配置文件的路徑
#localstatedir=/var/lib/mysql 資料庫存放的路徑
安裝完以後要初始化資料庫,當然你是升級的話不用做這步;
/usr/local/mysql/bin/mysql_install_db
如果系統沒有mysql這個用戶的話,最好做以下這步:
useradd -M -o -r -d /var/lib/mysql -s /bin/bash -c "MySQL Server" -u 27 mysql
然後我啟動mysql
/usr/local/mysql/bin/safe_mysqld &
ok,先看看mysql能否正常工作
mysql -uroot mysql
一般情況下都是不能正常鏈接資料庫,錯誤提示一般為:
ERROR 2002: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
其實網上大家問的最多的都是整個問題,說什麼鏈接不到mysqld.sock,其實大家不妨看看mysql的錯誤日誌就明白怎麼回事,我這里的錯誤日誌是在
/var/lib/mysql/*.err 你會發現mysql只所以不能啟動,是因為/var/lib/mysql的許可權不允許mysql服務訪問,英文mysql默認是調用mysql用戶來啟動服務的,好了,既然知道是什麼原因找到不能啟動,那就簡單了。我們只要
chown -R mysql:mysql /var/lib/mysql 就行,如果還是啟動不了,再慢慢調試許可權,反正一般啟動不了都是許可權的問題。
如果大家還是不能啟動不了的話,那就用我的比較繁瑣的許可權的設置,反正我每次都是這么做的,一般不會有問題,見下:
chown -R root /usr/local/mysql
chgrp -R mysql /usr/local/mysql
chown -R root /usr/local/mysql/bin
chgrp -R mysql /usr/local/mysql/bin
chgrp -R mysql /var/lib/mysql
chmod 777 /var/lib/mysql
chown -R root /var/lib/mysql/mysql
chgrp -R mysql /var/lib/mysql/mysql
chmod 777 /var/lib/mysql/mysql
chown -R root /var/lib/mysql/mysql/*
chgrp -R mysql /var/lib/mysql/mysql/*
chmod 777 /var/lib/mysql/mysql/*
chmod 777 /usr/local/mysql/lib/mysql/libmysqlclient.a
做完上面的步驟,然後把你編譯目錄的一個腳本COPY過去
cp support-files/mysql.server /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
用ntsysv設置使mysql每次啟動都能自動運行。
好了,至此mysql安裝完畢,你可以這樣起動你的mysql服務
/etc/rc.d/init.d/mysqld start
下面這步比較關鍵,
ln -s /usr/local/mysql/lib/mysql /usr/lib/mysql
ln -s /usr/local/mysql/include/mysql /usr/include/mysql
大家可以不做這步,大可以在編譯其他軟體的時候自定義myslq的庫文件路徑,但我還是喜歡把庫文件鏈接到默認的位置,這樣你在編譯類似PHP,Vpopmail等軟體時可以不用指定mysql的庫文件地址。
2.安裝Apache1.3.29。我沒有選擇安裝Apache2.0是我對他還是不放心,因為網上最新公布的apache的漏洞基本上是針對2.0,當然大家可以自己選擇安裝相應的版本。我這里講的都是採用DSO動態編譯的方法編譯Apache.
至於有關apache的編譯方法,可以參考我以前的文章《apache的靜態/動態編譯在apache+php+mysql的應用》 http://www.5ilinux.com/apache01.html
軟體獲取:http://httpd.apache.org/
tar zvxf apache_1.3.29.tar.gz
cd apache_1.3.29
修改src/include/httpd.h 增大最大線程數
#define HARD_SERVER_LIMIT 256
改成
#define HARD_SERVER_LIMIT 2560
保存退出編譯apache
./configure --prefix=/usr/local/apache --enable-mole=so --enable-mole=rewrite --enable-shared=max --htdocsdir=/var/www &&
make &&
make install
#這里我們通過enable-mole參數告訴設置腳本,我們需要啟動so和rewrite模塊,so模塊是用來提DSO支持的apache核心模塊,而rewrite模塊則是用意實現地址重寫的模塊,由於rewrite模塊需要DBM支持,如果在初次安裝時沒有編譯進apache,以後需要用到時需要重新編譯整個apache才可以實現。為此除非你可以確定以後不會用到rewrite模塊,否則還是建議你在第一次編譯的時候把rewrite模塊編譯好。
enable-shared=max 這個參數的作用時編譯apache時,把除了so以外的所有apache的標准模塊都編譯成DSO模塊。而不是編譯進apache核心內。
好了安裝apache很簡單的哦,啟動apache看看
/usr/local/apache/bin/apachectl start
然後用ie看http://你的伺服器地址。應該能看到熟悉的apache羽毛標志。
3.安裝PHP4.3.4
軟體獲取:http://www.php.net/downloads.php
tar zvxf php-4.3.4.tar.gz
cd php-4.3.4
./configure \
--prefix=/usr/local/php \
--with-mysql=/usr/local/mysql \
--enable-force-cgi-redirect \
--with-freetype-dir=/usr \
--with-png-dir=/usr \
--with-gd --enable-gd-native-ttf \
--with-ttf \
--with-gdbm \
--with-gettext \
--with-iconv \
--with-jpeg-dir=/usr \
--with-png \
--with-zlib \
--with-xml \
--enable-calendar \
--with-apxs=/usr/local/apache/bin/apxs
make
make install
#我這里由於伺服器需要用到GD庫,所以加了一些支持GD的編譯參數 ,GD直接用了redhat自帶的GD庫,大家沒有安裝的話可以從安裝盤安裝,注意除了安裝GD以外,還要安裝libjpeg,libpng等庫文件。另外--with-mysql=/usr/local/mysql指向你安裝mysql的路徑。--with-apxs指向apache的apxs文件的路徑。
vi /usr/local/apache/conf/httpd.conf
查找
在此范圍添加
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
然CPOPY PHP的配置文件
cp ../php4.3.4/php.ini.dist /usr/local/php/lib/php.ini
修改php.ini文件
register_globals = On
ok!重新啟動一下apache伺服器
/usr/local/apache/bin/apachectl restart
然後寫個php測試頁info.php:內容如下
<?php
phpinfo();
?>
正常的話,應該能看到php的信息了,恭喜你的Apche+Mysql+PHP安裝成功。
好了寫了這么多,希望對大家有所幫助!!!