運維筆記22 (apache的基本配置,靜態網頁,動態cgi,論壇搭建,squid實現正向,反向代理,簡易cdn加速)

概述:

今天說的這個服務可以說是重中之重,他是互聯網時代使用最多的一個服務,就是爲人們提供網頁的服務http。http服務器有很多比如apache,nginx,tomcat等。今天的主角是apache,也是使用最多的一個http服務器,也是著名的lamp中的一環。

1.http配置的幫助文件

我們可以下載httpd-manual來查看,也可以登陸apache的官網查看httpd的配置文件的配置方法。或者百度搜索apache幫助文檔,會有中文的哦。


2.apache主配置文件

/etc/httpd/conf/httpd.conf

 42 Listen 80
修改這裏後可以修改監聽的端口號

http://172.25.254.103:8080/
在瀏覽器輸入上面的信息就可以訪問我們開啓的http服務了。

但是一般情況別人訪問我們的http服務時都是默認端口號爲80,如果修改成了別的,很多人就無法訪問了,我們還是改過來比較好。

102 <Directory />
103     AllowOverride none
104     Require all denied
105 </Directory>

這是對http服務根目錄的規定,這裏表示/目錄無論如何都不會成爲http的/目錄

119 DocumentRoot "/var/www/html"
124 <Directory "/var/www">
125     AllowOverride None
126     # Allow open access:
127     Require all granted
128 </Directory>
這裏規定了誰是我們http的根目錄,接下來我們對這個目錄的權限進行一些設定

DocumentRoot "/var/www/html"

#
# Relax access to content within /var/www.
#
<Directory "/var/www">
   AllowOverride None
    # Allow open access:
    Require all granted
    Order Allow,Deny
    Allow from ALL
    Deny from 172.25.254.4
</Directory>

AllowOverride None #是否讀取.htaccess文件

Require all granted#允許所有請求訪問資源

Order Allow,Deny #讀取下面Allow和Deny的順序

Allow from ALL #允許所有人登陸

Deny from 172.25.254.4 #拒絕172.25.254.4訪問


登陸服務需要密碼的設置

首先我們修改一下根目錄,改爲/www,所以要在/下創建www目錄

現在需要在httpd.conf最後添加如下代碼

DocumentRoot "/www"
<Directory "/www">
        AllowOverride All
        Authuserfile /etc/httpd/htpasswdfile
        Authname "Please input username and password"
        Authtype basic
        Require valid-user
</Directory>
Authuserfile #賬戶密碼對應關係數據庫目錄

可以使用如下命令生成htpasswdfile,其中admin是登陸用戶名

[root@mail conf]# htpasswd -cm htpasswdfile admin
Authname#登陸時的提示信息
Authtype #驗證的類型,這裏我們選擇基本

Require #表示驗證的用戶如果是user $username形式表示驗證某個用戶,如果是valid-user表示文件裏面的所有用戶

現在重新在瀏覽器輸入剛纔的ip



會提示你輸入賬號密碼才能訪問

最後提醒一點配置文件中一定要去掉require all granted,因爲這是無論像誰都授權的意思,添加了你的密碼驗證就無效了。

2.http的虛擬用戶

根據我們剛纔所瞭解的http服務,我們想象一個場景,我們如果自己想建兩個網站,但是隻有一臺電腦,是不是就沒辦法了呢?因爲輸入一個ip後進入的http服務根目錄只有一個呀。我們的虛擬用戶就是解決這個問題的,這次所講的虛擬用戶是根據域名的虛擬用戶,也就是說輸入的域名不同進入的主機的目錄就不同。

既然需要域名,我們就要使用dns服務了,但是爲了突出重點我們只對host文件進行編輯

172.25.254.103 www.momo.com
172.25.254.103 music.momo.com
剛纔講解http的主配置文件時,不知道大家有沒有觀察到下面這一行

IncludeOptional conf.d/*.conf
這行表示在conf.d下的所有以.conf結尾的文件都被包含進了配置文件中。

所以我們對虛擬用戶的配置在單獨的文件中進行。

分別是music.conf和www.conf

music.conf配置如下:

<Virtualhost *:80>
        Servername music.momo.com
        Documentroot /www/virtual/music
        Customlog "logs/music.log" combined
</Virtualhost>
<Directory "/www/virtual/music">
        Require all granted
</Directory>
www.conf配置如下

<Virtualhost *:80>
        Servername www.momo.com
        Documentroot /var/www/html
        Customlog "logs/www.log" combined
</Virtualhost>
<Directory "/var/www/html">
        Require all granted
</Directory>
這樣根據域名的不同就可以訪問不同的目錄了。


3.由http升級爲https

https是對http協議的加強版,具有更高的安全性,兩個協議的端口號並不一樣,一個是80端口,一個是443端口,想讓apache支持https,首先要下載一個插件,插件的名字是mod_ssl,apache支持後,需要有一個生成密鑰的軟件,叫做crypto-utils,我們使用它來生成密鑰,密鑰生成過程如下:


選擇生成密鑰的位數


生成隨機數過程記住要隨機的敲擊鍵盤或者移動鼠標,可以加快隨機數的生成


你是否要把密鑰給真正的CA呢,當然不要


你要給你的密鑰加密碼嗎?



添加你的一些信息


密鑰生成後我們要對apache的配置文件修改,使其可以啓用ssl。

修改的配置文件是/etc/httpd/conf.d/ssl.conf,修改的行如下

100 SSLCertificateFile /etc/pki/tls/certs/www.momo.com.crt
106 SSLCertificateKeyFile /etc/pki/tls/private/www.momo.com.key
保存後重啓http服務即可生效

在瀏覽器輸入https開頭的url即可訪問你的http服務器了,當然由於是自己製作的證書,瀏覽器是一定會提醒你有危險的。


4.http虛擬主機加ssl

這裏就是讓你服務器上的多個虛擬主機都具備https,而不是隻有www.momo.com是安全加密的。和2中的一樣,首先配置出兩個虛擬主機,域名分別是www.momo.com music.momo.com。

我們首先給這兩個站點都加上https的訪問方式,這種配置方式的結果是同一個頁面的http和https方式共存。

配置文件如下:

/etc/httpd/conf.d/default.conf

<Virtualhost _default_:80>
        ServerName www.momo.com
        Documentroot /www/virtual/www
        Customlog logs/default.log combined
</Virtualhost>
<Directory "/www/virtual/www">
        require all granted
</Directory>
<Virtualhost _default_:443>
        ServerName www.momo.com
        Documentroot /www/virtual/www
        Customlog logs/default-443.log  combined
        SSLEngine on
        SSLCertificateFile /etc/pki/tls/certs/www.momo.com.crt
        SSLCertificateKeyFile /etc/pki/tls/private/www.momo.com.key
</Virtualhost>
/etc/httpd/conf.d/music.conf

<Virtualhost *_:80>
        ServerName music.momo.com
        Documentroot /www/virtual/music
        Customlog logs/music.log combined
</Virtualhost>
<Directory "/www/virtual/music">
        require all granted
</Directory>
<Virtualhost *:443>
        ServerName music.momo.com
        Documentroot /www/virtual/music
        Customlog logs/music-443.log    combined
        SSLEngine on
        SSLCertificateFile /etc/pki/tls/certs/www.momo.com.crt
        SSLCertificateKeyFile /etc/pki/tls/private/www.momo.com.key
</Virtualhost>

瀏覽器訪問結果


現在大家考慮一個問題,我們日常生活中訪問的有些主頁是不是會將你http的訪問方式自動轉換爲https的安全訪問,例子如下:

這是我在瀏覽器地址欄的輸入

這是訪問成功後地址欄的顯示,自動將http轉換爲了https

這一共能我們通過apache也可以實現,就是網頁重寫。修改的配置文件仍然是上一步的那兩個。

配置文件如下:

/etc/httpd/conf.d/default.conf

<Virtualhost _default_:80>
        ServerName www.momo.com
        RewriteEngine on
        RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=301]
</Virtualhost>
<Directory "/www/virtual/www">
        require all granted
</Directory>
<Virtualhost _default_:443>
        ServerName www.momo.com
        Documentroot /www/virtual/www
        Customlog logs/default-443.log  combined
        SSLEngine on
        SSLCertificateFile /etc/pki/tls/certs/www.momo.com.crt
        SSLCertificateKeyFile /etc/pki/tls/private/www.momo.com.key
</Virtualhost>
/etc/httpd/conf.d/music.conf

<Virtualhost *_:80>
        ServerName music.momo.com
        RewriteEngine on
        RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=301]
</Virtualhost>
<Directory "/www/virtual/music">
        require all granted
</Directory>
<Virtualhost *:443>
        ServerName music.momo.com
        Documentroot /www/virtual/music
        Customlog logs/music-443.log    combined
        SSLEngine on
        SSLCertificateFile /etc/pki/tls/certs/www.momo.com.crt
        SSLCertificateKeyFile /etc/pki/tls/private/www.momo.com.key
</Virtualhost>
當配置文件做如上修改後,即可將http請求自動變爲https請求了。

5.apache上運行動態頁面

大家一定聽說過lamp,也就是linux+apache+mysql+php,可以說有了這四個部件我們就可以搭建自己的動態網站了,但是所講的apache應用中,apache上面搭載的網頁都是靜態網頁,也就是一兩條簡單的html語句,想讓網頁成爲動態的,還需要有其他語言的支持,當然apache也要進行一定的擴展。

5.1apache+php

既然想讓apache運行php,首先當然要有php的環境,我們選擇從yum直接下載,之後將php頁面放入規定的網頁目錄下即可訪問。

<?php
phpinfo();
?>
index.php中簡易的php語句



5.2apache的cgi

這裏我們先下載一個apache的指導手冊,來幫助我們找到如何運行cgi。

通過手冊我們找到如何讓我們的apache運行cgi


perl腳本

#!/usr/bin/perl
print "hello world";
<Virtualhost *:80>
        Documentroot /var/www/cgi-bin
        Customlog logs/cgi.log combined
</Virtualhost>
<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options +ExecCGI
    AddHandler cgi-script .cgi
</Directory>
在conf.d下創建一個cgi.conf配置文件,填寫如上信息。

一切好像都沒問題,但是當我運行的時候,卻發現無論怎樣都會出現500的錯誤,截圖如下。


在後臺查看http服務的錯誤日誌發現

[Mon Dec 12 04:45:26.727583 2016] [cgi:error] [pid 7111] [client 172.25.254.3:45896] malformed header from script 'index.cgi': Bad header: hello world

看到這個後我才恍然大悟,原來perl腳本作爲cgi的時候,腳本文件第一句一定要先定義類型,然後跟着是一個新空行,在下來就是主程序了,由於我在定義內型後沒有輸出文件頭及換行,直接就是主程序,所以一才導致上面出現的錯誤。

將腳本修改爲:

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "hello world";
print `date`;
代碼修改成上面後,就可以看到動態網頁了!好激動

上面的代碼使用perl寫的,但是我們對perl不是很熟悉,我們看看可不可以用shell或者python寫一個cgi動態頁面呢?

下面就是一個用shell寫的cgi

#!/bin/bash
#index.cgi
echo "Content-Type:text/html"
echo ""
echo ""
echo "hello world"
echo "<br>"
echo "<br>"
while : ;do

date
sleep 1
done
可以一直輸出時間。切記,開頭一定要定義格式!

6.搭建自己的論壇

如果理解上面的動態頁面與靜態頁面的使用,我們可以來點激動人心的實驗了,做一個自己的論壇,其實並不是很難,因爲論壇的前端後臺基本都寫好了,我們只要配置就好啦,我們使用的模板就是Discuz論壇模板。

首先下載好Discuz的壓縮包,然後解壓

[root@mail mnt]# ls
config_virtual.sh  default.conf  Discuz_X3.2_SC_UTF8.zip  readme  upload  utility
接下來將解壓後的文件複製到你的apache根目錄(因爲咱們前面修改後,可能不是/var/www/html)
這時我們可以看下他的readme

1. 上傳 upload 目錄中的文件到服務器
2. 設置目錄屬性(windows 服務器可忽略這一步)
        以下這些目錄需要可讀寫權限
        ./config
        ./data 含子目錄
3. 執行安裝腳本 /install/
   請在瀏覽器中運行 install 程序,即訪問 http://您的域名/論壇目錄/install/
4. 參照頁面提示,進行安裝,直至安裝完畢

根據安裝的步驟我們去做就可以啦!

上面的修改完成後,在網頁上輸入upload的路徑即可進入安裝嚮導



     

但是發現還有問題沒有解決,uc_server目錄需要加上可寫權限,而且mysql也還沒下載,但是uc_server權限加好後,mariadb下載好後,卻發現mysqli_connect()的問題還沒有解決,仔細想想才明白,這個論壇是php寫的,需要mysql對php的支持纔可以運行

[root@mail upload]# yum install php-mysql -y
重啓服務器,因爲服務器要重讀與php,mysql連接的一些配置

再輸入剛纔的網址。



錯誤已經全部解決。直接下一步,填寫一些管理員的信息,數據庫的密碼




安裝成功後我們的論壇就搭建好了。


7.squid的應用

Squid是一種用來緩衝Internet數據的軟件。它是這樣實現其功能的,接受來自人們需要下載的目標(object)的請求並適當地處理這些請求。聯想一下,比如我們的電腦A不能上網,但是另一臺主機B可以上網,我們是不是可以將B作爲我們的代理服務器,讓B將訪問的頁面緩存下來,這樣我們去訪問B的緩存,是不是我們也可以上網了,換個思路,是不是也可以翻~呢,哈哈。

7.1http正向代理

也就是我們剛上來講的,將頁面緩存下來,作爲其他不能上網的主機的代理服務器。因爲這也是squid的主要功能,所以配置起來十分簡單。

squid的配置文件爲

/etc/squid/squid.conf
 56 http_access allow all
 62 cache_dir ufs /var/spool/squid 100 16 256
第一個選項是允許別人可以訪問squid服務,原本是"http_access deny all"

第二個選項是緩存的目錄,以前是註釋掉的

這樣就配置好一個緩存服務器

測試的方法是,一臺真機開兩臺虛擬機,真機上搭建http服務且網段爲172.25.254.0,虛擬機A配置雙網卡網段分別爲172.25.254.0 172.25.3.0,且配置squid緩存服務,虛擬機B網段在172.25.3.0。

現在虛擬機A可以訪問真機的網頁,但是B不可以,所以讓B以A爲http代理即可訪問主機的網頁。

現在在虛擬B的瀏覽器設置如下







原本無法訪問172.25.254.0網段的虛擬機B可以訪問172.25.254.3上的網頁了。

7.2反向代理

正向代理是我們主動設置代理服務器,由代理服務器去請求客戶需要的資源,這個過程需要我們手動設置。

反向代理是我們沒有設置這個代理服務器,而是它自動讓我們訪問他,從而達到加速的目的,比如我們每次訪問騰訊官網,不可能直接就到總服務器,而是每個省份都有一個空殼服務器,來幫我們緩存網頁,這樣不但加快了訪問速度,還保護了主服務器。

試想一下剛纔squid的端口號可是3128,而http是80,那客戶到時候訪問的時候難道還要修改端口號,纔不要,多麻煩啊,所以我們需要在服務端設置好,讓squid的端口號爲80,所以,這臺服務器上不能有http服務,要不就衝突了。

首先將http服務卸載乾淨,接下來對squid.conf做如下修改

 59 http_port 80 vhost vport
 60 cache_peer 172.25.254.3 parent 80 0 no-query
首先要虛擬端口,然後配置它向誰緩存網頁即可,這些配置信息其實都可以在下面的文件找到
/usr/share/doc/squid-3.3.8/squid.conf.documented

重啓服務器


現在只要我們輸入虛擬機A的ip就可以訪問主機172.25.254.3上的網頁了。

最後簡要介紹一下多臺服務器切輪詢訪問,配置文件要如何寫:

 60 cache_peer 172.25.254.3 parent 80 0 no-query originserver round-robin name=web1
 61 cache_peer 172.25.254.4 parent 80 0 no-query originserver round-robin name=web2
 62 cache_peer_domain web1 web2 www.momo.com
這樣就可以輪詢訪問了,就是第一次訪問3網段第二次訪問4網段。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章