歡迎您光臨本站 註冊首頁

linux15-web伺服器

←手機掃碼閱讀     火星人 @ 2014-03-08 , reply:0

web 伺服器


www.netcraft.net --此網站會有每月份的世界上網站使用的WEB伺服器的使用率統計

apache a patch server
IIS
google
nginx

lighttpd
IBM websphere
tomcat jboss weblogic --中間件

windows server iis sqlserver(mssql) asp
lamp: linux apache mysql php
lnmp : linux nginx(讀engine X) mysql php

[root@li ~]# yum install httpd* -y


[root@dns share]# rpm -qa |grep httpd
httpd-manual-2.2.3-31.el5
httpd-2.2.3-31.el5
httpd-devel-2.2.3-31.el5

ServerTokens OS --向客戶端提供一些伺服器和信息

erverRoot "/etc/httpd" --存放配置文件一主目錄

PidFile run/httpd.pid --pid文件

Timeout 120 --連接超時時間

KeepAlive Off --一般是短時間下載文件比較多的網站 在ON的時候 一次連接多次請求

Listen 80 --監聽埠

--進程模式
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 256 --最大併發數
MaxRequestsPerChild 4000

下面的都屬於叫DSO dynamic shared object 動態共享模塊
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_alias_module modules/mod_authn_alias.so
LoadModule authn_anon_module modules/mod_authn_anon.so
LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authz_host_module modules/mod_authz_host.so


LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_owner_module modules/mod_authz_owner.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_dbm_module modules/mod_authz_dbm.so
LoadModule authz_default_module modules/mod_authz_default.so
..................................


Include conf.d/*.conf --表示conf.d/下的*.conf配置文件生效

User apache
Group apache --以什麼身份運行

ServerAdmin root@localhost --管理郵箱

DocumentRoot "/www" --網站家目錄

DirectoryIndex index.html index.html.var --定義主頁文件

AccessFileName .htaccess --網頁加密

ErrorLog logs/error_log --錯誤日誌

LogLevel warn --日誌等級


--下面為日誌的格式
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent


ServerTokens OS --向客戶端提供一些伺服器和信息

erverRoot "/etc/httpd" --存放配置文件一主目錄

PidFile run/httpd.pid --pid文件

Timeout 120 --連接超時時間

KeepAlive Off --一般是短時間下載文件比較多的網站 在ON的時候 一次連接多次請求

Listen 80 --監聽埠

--進程模式
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 256 --最大併發數
MaxRequestsPerChild 4000

下面的都屬於叫DSO dynamic shared object 動態共享模塊
LoadModule auth_basic_module modules/mod_auth_basic.so


LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_alias_module modules/mod_authn_alias.so
LoadModule authn_anon_module modules/mod_authn_anon.so
LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_owner_module modules/mod_authz_owner.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_dbm_module modules/mod_authz_dbm.so
LoadModule authz_default_module modules/mod_authz_default.so
..................................


Include conf.d/*.conf --表示conf.d/下的*.conf配置文件生效

User apache
Group apache --以什麼身份運行

ServerAdmin root@localhost --管理郵箱

DocumentRoot "/www" --網站家目錄

DirectoryIndex index.html index.html.var --定義主頁文件

AccessFileName .htaccess --網頁加密

ErrorLog logs/error_log --錯誤日誌

LogLevel warn --日誌等級


--下面為日誌的格式
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

/etc/init.d/httpd start

使用瀏覽器:輸入自己的IP,或者127.0.0.1迴環地址會看到一個紅帽的歡迎頁面


例一:建立網站主頁
在網站根目錄下 建立一個主頁文件

echo 'main page' > /var/www/html/index.html

http://127.0.0.1/ --就可以看到main page的信息,也就是直接訪問到主頁

把主頁文件寫成html標籤的格式如下



例二:修改網站根目錄

vim /etc/httpd/conf/httpd.conf

281: DocumentRoot "/www" --修改網站根目錄為/www

306: --把這個也對應的修改為/www

mkdir /www

/etc/init.d/httpd reload --重裝啟apache服務

echo 'new main page' > /www/index.html

http://127.0.0.1/ --看到新網站根目錄下的new main page信息


例三:修改主頁類型或者主頁名


DirectoryIndex index.php index.html.var

/etc/init.d/reload

使用瀏覽器訪問,發現沒有返回主頁信息,因為上面的意思為:先找網站家目錄下的index.php,不存在話,再找index.html.var,都不存在,就表示找不到主頁


echo 'php main page' > /www/index.php


再使用瀏覽器訪問,就會返回php main page信息


elinks 10.1.1.45 --elinks是一個文本模式的web瀏覽器


例四:修改語言集和字符集

DefaultLanguage zh-CN --默認語言集打開註釋,並改為簡體中文zh-CN

LanguagePriority zh-CN en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-TW --語言優先順序,把zh-CN寫到最前

AddDefaultCharset UTF-8 --字元編碼,如果中文的話,有可能需要改為gb2312或者gbk,因你的網站文件的默認編碼而異

----------------------------------

關於apache的標籤,容器(訪問控制)

directory (目錄) file(文件) location (位置)


--對/www目錄進行的控制
Options Indexes FollowSymLinks --允許列表,符號鏈接
AllowOverride None --不使用.htaccess控制
Order allow,deny
Allow from all --針對/www目錄的訪問許可權的控制,這兩句代表允許所有訪問
--容器結束

indexes --指當找不到默認的主頁文件時,就把此目錄下的文件或者目錄以列表形式顯示出來
FollowSymlinks --允許符號鏈接,擴展了網站根目錄,允許鏈接到網站根目錄以外
allowoverride none --可以把none改為all來允許.htaccess控制
order allow,deny --指定的是先允許,后拒絕
allow from all --指定允許所有

例五:把網站的文件修改成目錄列表的形式

條件1.
Options Indexes FollowSymLinks --相應目錄要有indexes參數
條件2.
沒有主頁文件
條件3.
符合上面兩個條件,就會訪問到redhat的歡迎頁面

vim /etc/httpd/conf.d/welcome.conf --註釋掉這個歡迎頁面,或者是刪除它


/etc/init.d/httpd reload

elinks 127.0.0.1 --可以看到是以列表形式顯示了

例六:訪問許可權控制 --注意這些訪問許可權控制是針對容器的


Order allow,deny
Allow from all --允許所有

Order allow,deny
deny from all --拒絕所有

Order allow,deny
allow from all
deny from 2.2.2.35 --允許所有,但拒絕35

Order allow,deny
allow from all
deny from all --拒絕所有

Order allow,deny
deny from all
allow from all --還是拒絕所有,讀取的順序由order決定


練習:在/www目錄下新建一個bbs目錄,也就是/www/bbs,再在/www/bbs里建立一個index.html文件,使用directory目錄容器控制拒絕35訪問,別的都允許


order allow,deny
allow from all
deny from 10.1.1.35 --可以把10.1.1.35換成.cluster.com這個表示cluster.com這個域下的所有主機名都不能訪問(需要hosts文件和DNS來支持)

--加上這段話,不要嵌套在/www的目錄容器里


例七.files 容器 --針對文件的控制



Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
--表示35這個客戶端不能訪問/www/1,如果要控制/www/bbs/1這個文件,不能在這裡寫成,需要在/www/bbs這個目錄的directory容器里再嵌套files標籤來控制
order allow,deny
allow from all
deny from 10.1.1.35



order allow,deny
deny from all
--這種寫法沒有生效,不對,要files容器嵌套到目錄容器內部,要上面的那種寫法


--下面這段是apache的默認的一個files容器的配置示例
--以.ht開頭的文件不被客戶端用戶看到
Order allow,deny
Deny from all


例:網站下所有目錄(包括子目錄)以ule開頭的文件都不能被訪問

order allow,deny
deny from all

練習:網站下所有目錄(包括子目錄)以.txt結尾的文件都不能被訪問


order allow,deny
deny from all


例八:location 容器



order allow,deny
deny from all

--這是對http://IP/bbs 這種URL來進行許可權控制


--location容器有時候和directory有可能重合,並且配置有衝突,那麼location優先生效,下面這種情況,http://IP/bbs是不能訪問的


order allow,deny
deny from all



order allow,deny
allow from all

例九:對mod_status和mod_info這兩個DSO配置伺服器的信息查看


176 LoadModule status_module modules/mod_status.so

890
891 SetHandler server-status
892 Order deny,allow
893 Deny from all
894 Allow from 10.1.1.35
895


178 LoadModule info_module modules/mod_info.so


902
903 SetHandler server-info
904 Order deny,allow
905 Deny from all
906 Allow from 10.1.1.35
907


http://IP/server-status

http://IP/server-info

例十:對網站目錄使用apache的基本加密功能 .htaccess


# vim /www/.htaccess   --對哪個目錄進行限制,就在哪個目錄下建立此文件

authname "please input your username and password! @_@"
authtype basic
authuserfile /etc/httpd/userpasswd


require valid-user

# htpasswd -c /etc/httpd/userpasswd aaa  --創建此文件,並加入一個用戶,自定義密碼,注意此用戶與系統普通用戶無關
New password:
Re-type new password:
Adding password for user aaa


# htpasswd /etc/httpd/userpasswd bbb  --再增加一個用戶
New password:
Re-type new password:
Adding password for user bbb


# cat /etc/httpd/userpasswd
aaa:JscuRCtWV0Sh.
bbb:C6wrx4pFco/lk --密碼為密文


# vim /etc/httpd/conf/httpd.conf


Options Indexes FollowSymLinks
AllowOverride all --改成all,支持.htaccess加密
Order allow,deny
Allow from all

# /etc/init.d/httpd restart

http://IP 訪問時,需要驗證

再次訪問需要清空瀏覽器緩存才需要驗證

練習:針對家目錄下的一個子目錄打開驗證

例十:
用戶主頁空間

336
342 # UserDir disable --註釋這一行
349 UserDir public_html --打開這一行的註釋
351


--再把下面這一段打開註釋
357
358 AllowOverride FileInfo AuthConfig Limit
359 Options MultiViews Indexes SymLinksIfOwnerMatch In cludesNoExec
360
361 Order allow,deny
362 Allow from all
363

364
365 Order deny,allow
366 Deny from all
367

368

# /etc/init.d/httpd restart


# mkdir /home/user1/public_html


# mkdir /home/user2/public_html
# echo "user1空間主頁" > /home/user1/public_html/index.html
# echo "user2空間主頁" > /home/user2/public_html/index.html

# chmod 701 /home/user1/
# chmod 701 /home/user2/

--訪問測試
http://IP/~user1/
http://IP/~user2/

======================================


虛擬主機

一台伺服器跑多台web服務


VPS virtual private server 虛擬專用伺服器

使用虛擬化技術(vitural sever 或者 vmware EXS server )把一台伺服器分隔成幾個伺服器,每個都擁有獨立的CPU資源,內存資源,磁碟資源,獨立IP等


[root@36 ~]# mkdir /www/aaa
[root@36 ~]# mkdir /www/bbb
[root@36 ~]# mkdir /www/ccc
[root@36 ~]# echo "aaa main page" > /www/aaa/index.html
[root@36 ~]# echo "bbb main page" > /www/bbb/index.html
[root@36 ~]# echo "ccc main page" > /www/ccc/index.html

例十一:基於IP的虛擬主機

NameVirtualHost *:80


DocumentRoot /www/aaa
ServerName 10.1.1.36
ErrorLog logs/36-error_log
CustomLog logs/36-access_log common


DocumentRoot /www/bbb
ServerName 10.1.1.37
ErrorLog logs/37-error_log
CustomLog logs/37-access_log common


DocumentRoot /www/ccc
ServerName 10.1.1.38
ErrorLog logs/38-error_log
CustomLog logs/38-access_log common

[root@36 ~]# ifconfig eth0:0 10.1.1.37 netmask 255.255.255.0


[root@36 ~]# ifconfig eth0:1 10.1.1.38 netmask 255.255.255.0

[root@36 ~]# /etc/init.d/httpd restart

驗證:
http://10.1.1.36/
http://10.1.1.37/
http://10.1.1.38/


缺點很明顯:浪費IP地址資源


例十二:基於埠的虛擬主機

Listen 80
Listen 8000
Listen 8080


DocumentRoot /www/aaa
ServerName 10.1.1.36
ErrorLog logs/36-error_log
CustomLog logs/36-access_log common


DocumentRoot /www/bbb
ServerName 10.1.1.36
ErrorLog logs/37-error_log
CustomLog logs/37-access_log common


DocumentRoot /www/ccc
ServerName 10.1.1.36
ErrorLog logs/38-error_log
CustomLog logs/38-access_log common

/etc/init.d/httpd restart

驗證:
http://10.1.1.36/
http://10.1.1.36:8000/
http://10.1.1.36:8080/


缺點:客戶端訪問時輸入埠不方便,對客戶端來說不夠透明:還有就是開放埠多了,安全性降低

例十三:基於域名的虛擬主機


--需要DNS的cname記錄的支持

aaa.web.com
bbb.web.com
ccc.web.com


--以下架構是DNS伺服器和apache伺服器的IP在同一台機器10.1.1.36上,也可以考慮分成兩台伺服器來做

[root@36 ~]# yum install bind* -y


[root@36 ~]# vim /var/named/chroot/etc/named.conf

options {
directory "/var/named";
};

zone "web.com" IN {
type master;
file "data/master.web.com.zone";
};


[root@36 ~]# vim /var/named/chroot/var/named/data/master.web.com.zone
$TTL 86400
@ IN SOA sdfasdfsa. sfddsafas. (
2011032601
120
240
360
86400 )
IN NS sdfsafasfddfsa.web.com.
aaa IN A 10.1.1.36 --這裡為apache伺服器的IP
bbb IN CNAME aaa
ccc IN CNAME aaa

[root@36 ~]# /etc/init.d/named restart


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


NameVirtualHost *:80

DocumentRoot /www/aaa
ServerName aaa.web.com
ErrorLog logs/aaa-error_log
CustomLog logs/aaa-access_log common


DocumentRoot /www/bbb
ServerName bbb.web.com
ErrorLog logs/bbb-error_log
CustomLog logs/bbb-access_log common


DocumentRoot /www/ccc
ServerName ccc.web.com
ErrorLog logs/ccc-error_log
CustomLog logs/ccc-access_log common


[root@36 ~]# /etc/init.d/httpd restart

--以下是客戶端的驗證
[root@li data]# vim /etc/resolv.conf
nameserver 10.1.1.36 --DNS指向DNS伺服器的IP


http://aaa.web.com/
http://bbb.web.com/
http://ccc.web.com/

思考:
1.上面三個域名,那麼我直接用IP是能否訪問,訪問的是哪一個?為什麼?

答案:哪個虛擬主機在最前面,直接使用IP訪問的就是哪一個

2.配置了虛擬主機后,那麼我原來的DocumentRoot里指的原網站家目錄是否還可用?


如果不可用,如何解決?

答案:不能用.
除非再為原家目錄再建立一個虛擬主機

3,有時間報forbidden的錯誤,並不一定是許可權的問題.
還有一種可能是,你訪問的這個目錄沒有做列表形式,也沒有主頁,也會報dorbidden的

===================================================

第三方模塊 實現apache限速


/share/soft/lamp/apache_source/mod-cband-0.9.7.2.tgz
/share/soft/lamp/apache_source/mod_cband.pdf --官方PDF文檔

解壓並CD進去進行編譯
tar xvf mod-cband-0.9.7.2.tgz -C /usr/src/
cd /usr/src/mod-cband-0.9.7.2/

./configure ;make ;make install

確認/etc/httpd/conf/httpd.conf里是否自動載入了下面這句話
LoadModule cband_module /usr/lib/httpd/modules/mod_cband.so


針對虛擬主機new.cluster.com進行限速

NameVirtualHost *:80

DocumentRoot /www/aaa
ServerName news.cluster.com
ErrorLog logs/aaa.com-error_log
CustomLog logs/aaa.com-access_log common

cbandlimit 100M --指網站允許的總的下載流量
cbandperiod 1W --清空時間
cbandspeed 1024 10 30 --當前總帶寬,每秒可以同時連接10個,最大的總連接數
cbandremotespeed 10kb/s 3 3 --針對單一客戶端下載速度為10kb/s,每秒可以同時3個連接,最多一個IP生成3個連接

sethandler cband-status --使用http://IP/cband-status訪問控制狀態


sethandler cband-status-me ----使用http://IP/cband-status-me訪問控制狀態

/etc/init.d/httpd restart


dd if=/dev/zero of=/www/aaa/123 bs=1M count=1000 --創建一個大點的文件,做下載測試

wget http://news.cluster.com/123 --使用wget下載,發現被限速了

使用下面的URL地址訪問狀態信息頁面
http://news.cluster.com/cband-status
http://news.cluster.com/cband-status-me

==========================================================

網站的日誌切割


www.cronolog.org


軟體包位置:
ls /share/soft/soft/log/
cronolog-1.6.2.tar.gz cronolog.pdf cronosplit.pdf

解壓到任意目錄,我這裡是/usr/local
[root@station156 log]# tar xvf cronolog-1.6.2.tar.gz -C /usr/local/

[root@station156 log]# cd /usr/local/


[root@station156 local]# cd /usr/local/cronolog-1.6.2/

編譯安裝
[root@station156 cronolog]# ./configure ;make ;make install

1,先註釋掉虛擬主機,虛擬主機需要每個都配,為了方便,這裡注意掉,使用原來的web伺服器配置

vim /etc/httpd/conf/httpd.conf

修改:
CustomLog logs/access_log combined
改成:
CustomLog "|/usr/local/sbin/cronolog /opt/%Y/%m/%d/access_log" combined
--注意格式不要寫錯


重啟apache后,過幾秒,或者訪問一下apache

就會在/opt下產生了


關於日誌合併

因為有些日誌分析軟體,它是只分析access.log;當要分析多個網站的access.log的總流量,就需要把它們的access.log合併一起,再由分析軟體去分析這個合併的log文件


# sort -m -k 4 -o newaccess.log access_log access_log1

1.編譯安裝一下源碼版的httpd,然後比較一下和RPM版的區別
[root@dns share]# ls /share/soft/apache_source/httpd-2.2.9.tar.gz
/share/soft/apache_source/httpd-2.2.9.tar.gz


[root@dns httpd-2.2.9]# ./configure --prefix=/usr/local/apache2 --enable-so --enable-rewrite --enable-modules=all --enable-file-cache --enable-cache --enable-disk-cache --enable-mem-cache --enable-ssl

[root@dns httpd-2.2.9]# make ;make install

2.
安裝mod_dosevaseive 插件防DDOS
distributed deny of service

軟體包在下面
/share/soft/lamp/apache_source/mod_dosevasive.1.8.tar.gz

安裝方法,和使用方法都在解壓后的readme文件里,嘗試做一下

驗證方法:因為DDos攻擊就是同一個IP大量去連接web伺服器,把參數改小點,然後手動去刷新訪問web伺服器,如果超過參數定義的次數,就會報拒絕就表示防護起作用了


[root@li ~]# /usr/sbin/apxs -i -a -c /usr/src/mod_dosevasive-1.8/mod_dosevasive20.c


# vim /etc/httpd/conf/httpd.conf
--編譯完后,可以在apache的配置文件里找到下面這一句

LoadModule dosevasive20_module modules/mod_dosevasive20.so

# vim /etc/httpd/conf/httpd.conf
--在配置文件加上下面一段

--注意是有20的那段,表示的是apache2.x版本
DOSHashTableSize 3097
DOSPageCount 2 --在DOSPageInterval時間內一個客戶端對同一個頁面刷新兩次,就認為是攻擊
DOSSiteCount 50 --在DOSSiteInterval時間內一個客戶端訪問站點50次,就認為是攻擊
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10 --鎖定時間

/etc/init.d/httpd restart

重啟后,使用F5鍵,對同一個頁面進行刷新測試

本文出自 「linuxart」 博客,請務必保留此出處http://linuxart.blog.51cto.com/686203/843962


[火星人 ] linux15-web伺服器已經有553次圍觀

http://coctec.com/docs/linux/show-post-45752.html