http 高級配置 虛擬主機,https 編譯安裝
目錄
- http 高級配置 虛擬主機,https 編譯安裝
- http 重定向 https
- HSTS
- HSTS preload list
- http 自帶的工具程序
- httpd的壓力測試工具
- 實現狀態頁
- 反向代理功能
- 虛擬主機
- 配置格式
- 基於IP的虛擬主機配置
- 基於端口的虛擬主機配置
- 基於FQDN(主機頭)的虛擬主機
- 搭建Https
- 創建CA服務器
- 為服務器申請證書
- web服務器安裝ssl 模塊
- http 重定向 https
http 高級配置 虛擬主機,https 編譯安裝
http 重定向 https
將http請求轉發至https的URL,防止客戶在訪問網站的時候,使用http協議頭,而不使用https。造成不安全的連接。但是這個方法存在一個問題,因為他的連接步驟是這個樣子的。而且他不存在記錄一說,用戶每次使用http來訪問,他都會重定向一次。
重定向
Redirect [status] URL-path URL
status狀態:
Permanent:Returns a permanent redirect status (301) indicating thatthe resource has moved permanently
配置示例:
vim /etc/httpd/conf.d/redirect.conf
Redirect temp / https://www.magedu.com/
HSTS
HSTS:HTTP Strict Transport Security
服務器端配置支持HSTS後,會在給瀏覽器返回的HTTP首部中攜帶HSTS字段。瀏覽器獲取到該信息後,會將所有HTTP訪問請求在內部做307跳轉到HTTPS。而無需任何網絡過程。這樣的話,只有第一次訪問,才會是使用http協議,後面都自動默認https協議
實現HSTS示例:
vim /etc/httpd/conf.d/redirect.conf
Header always set Strict-Transport-Security "max-age=31536000"
RewriteEngine on
RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=302]
HSTS preload list
是Chrome瀏覽器中的HSTS預載入列表,在該列表中的網站,使用Chrome瀏覽器訪問時,會自動轉換成HTTPS。Firefox、Safari、Edge瀏覽器也會采用這個列表。當你的網址加入該列表後,使用瀏覽器訪問該網站,只會使用https協議。
http 自帶的工具程序
htpasswd:basic認證基於文件實現時,用到的賬號密碼文件生成工具
apachectl:httpd自帶的服務控制腳本,支持start和stop
rotatelogs:日誌滾動工具
access.log -->
access.log, access.1.log -->
access.log, acccess.1.log, access.2.log
httpd的壓力測試工具
httpd的壓力測試工具
- ab, webbench, http_load, seige
- Jmeter 開源
- Loadrunner 商業,有相關認證
- tcpcopy:網易,復制生產環境中的真實請求,並將之保存
ab [OPTIONS] URL,來自httpd-tools包
- -n:總請求數
- -c:模擬的並行數
- -k:以持久連接模式測試
- ulimit –n # 調整能打開的文件數
實現狀態頁
#vim /etc/httpd/conf.d/test.conf
<Location "/status">
SetHandler server-status
Require all granted
</Location>
反向代理功能
啟用反向代理
- ProxyPass "/" "http://www.example.com/"
- ProxyPassReverse "/" "http://www.example.com/"
特定URL反向代理
- ProxyPass "/images" "http://www.example.com/"
- ProxyPassReverse "/images" http://www.example.com/
示例:
<VirtualHost *>
ServerName www.magedu.com
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
</VirtualHost>
虛擬主機
在一個物理服務上,搭建多個web站點,根據用戶的訪問。返回不同的站點
站點標識: socket
- IP相同,但端口不同
- IP不同,但端口均為默認端口
- FQDN不同: 請求報文中首部 Host: www.magedu.com
有三種實現方案:
- 基於ip:為每個虛擬主機準備至少一個ip地址
- 基於port:為每個虛擬主機使用至少一個獨立的port
- 基於FQDN:為每個虛擬主機使用至少一個FQDN
註意:一般虛擬機不要與main主機混用;因此,要使用虛擬主機,一般先禁用main主機
禁用方法:註釋中心主機的DocumentRoot指令即可
配置格式
<VirtualHost IP:PORT>
ServerName FQDN
DocumentRoot “/path"
</VirtualHost>
建議:上述配置存放在獨立的配置文件中,不要寫在http.conf中,方便管理
其它可用指令:
ServerAlias:虛擬主機的別名;可多次使用
ErrorLog: 錯誤日誌
CustomLog:訪問日誌
<Directory “/path"> </Directory>
Alias
基於IP的虛擬主機配置
#給網卡添加多個地址
ip a add 192.168.30.11/24 dev eth0
ip a add 192.168.30.22/24 dev eth0
ip a add 192.168.30.33/24 dev eth0
<VirtualHost 192.168.30.11>
#虛擬主機的別名;可多次使用,目前是不起作用的
ServerName www.a.com
#指定根目錄
DocumentRoot "/data/website1"
#錯誤日誌
ErrorLog "logs/a.com-error_log"
#訪問日誌
TransferLog "logs/a.com-access_log"
</VirtualHost>
<VirtualHost 192.168.30.22>
#虛擬主機的別名;可多次使用,目前是不起作用的
ServerName www.b.com
#指定根目錄
DocumentRoot "/data/website2"
#錯誤日誌
ErrorLog "logs/b.com-error_log"
#訪問日誌
TransferLog "logs/b.com-access_log"
</VirtualHost>
<VirtualHost 192.168.30.33>
#虛擬主機的別名;可多次使用,目前是不起作用的
ServerName www.c.com
#指定根目錄
DocumentRoot "/data/website3"
#錯誤日誌
ErrorLog "logs/c.com-error_log"
#訪問日誌
TransferLog "logs/c.com-access_log"
</VirtualHost>
基於端口的虛擬主機配置
vim /etc/http/conf.d/vhost.conf
mkdir /data/website{1,2,3} -pv
echo www.a.com > /data/website1/index.html
echo www.b.com > /data/website2/index.html
echo www.c.com > /data/website3/index.html
多個網站就要使用多個不同的端口綁定
listen 81
listen 82
listen 83
創建虛擬主機
#要綁定的IP和端口號
<VirtualHost *:81>
#虛擬主機的別名;可多次使用,目前是不起作用的
ServerName www.a.com
#指定根目錄
DocumentRoot "/data/website1"
#錯誤日誌
ErrorLog "logs/a.com-error_log"
#訪問日誌
TransferLog "logs/a.com-access_log"
</VirtualHost>
#要分權限,配合虛擬主機目錄使用
<Directory "/data">
Require all granted
</Directory>
將上述配置修改三份,對應上面的創建目錄
建議:上述配置存放在獨立的配置文件中,如果是在centos7 分配虛擬主機,一定要給目錄權限!!!否則無法訪問!!!一定要給目錄權限!!!否則無法訪問!!!
基於FQDN(主機頭)的虛擬主機
靠主機頭的HOST地址來區分,根據不同的主機頭,來返回不同的網站
根據虛擬主機中定義的ServerName
<VirtualHost *:80>
#這就是指定的訪問主機頭
ServerName www.a.com
#指定根目錄
DocumentRoot "/data/website1"
#錯誤日誌
ErrorLog "logs/a.com-error_log"
#訪問日誌
TransferLog "logs/a.com-access_log"
</VirtualHost>
<VirtualHost *:80>
#這就是指定的訪問主機頭
ServerName www.b.com
#指定根目錄
DocumentRoot "/data/website2"
#錯誤日誌
ErrorLog "logs/b.com-error_log"
#訪問日誌
TransferLog "logs/b.com-access_log"
</VirtualHost>
<VirtualHost *:80>
#這就是指定的訪問主機頭
ServerName www.c.com
#指定根目錄
DocumentRoot "/data/website3"
#錯誤日誌
ErrorLog "logs/c.com-error_log"
#訪問日誌
TransferLog "logs/c.com-access_log"
</VirtualHost>
centos 6 上實現的時候有一點差別,如果要實現基於名稱(主機頭)的虛擬主機,要加上NameVirtualHost 這一行,否則無法實現。
centos 6 上實現的時候有一點差別,如果要實現基於名稱(主機頭)的虛擬主機,要加上NameVirtualHost 這一行,否則無法實現。
centos 6 上實現的時候有一點差別,如果要實現基於名稱(主機頭)的虛擬主機,要加上NameVirtualHost 這一行,否則無法實現。
這樣就表示客戶端 訪問www.a.com就返回 a.com,訪問b.com就返回b.com,訪問c.com就返回c.com
在瀏覽器敲網址的時候,比如www.a.com ,他不僅僅是DNS解析,還會向服務器發送 HOST : www.a.com 的標記
如果是按網絡地址(IP地址)來訪問,那麽是返回虛擬主機中的第一個,第一個就屬於默認網站。
搭建Https
https = http + ssl
創建CA服務器
cd /etc/pki/CA
#生成CA私鑰
(umask 077; openssl genrsa -out pirvate/cakey.pem 2048)
#創建自簽名證書
openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650
echo 01 > serial
touch index.txt
為服務器申請證書
cd /etc/httpd/
mkdir certs
cd certs
#生成私鑰
(umask 077;openssl genrsa -out httpd.key 2048)
#生成證書簽署請求
openssl req -new -key httpd.key -out httpd.csr -days 3655
#簽名
openssl ca -in httpd.csr -out httpd.crt -days 3655
web服務器安裝ssl 模塊
yum install mod_ssl
安裝後會在/etc/pki/tls 下生成該包的一個私鑰,一個自簽名證書。
所以如果不自己搭建CA,是可以直接使用的
配置mod_ssl配置文件 ,在安裝這個模塊後,這個文件會自己生成
vim /etc/httpd/conf.d/ssl.conf
#修改成我們自己的CA
#指定證書
SSLCertificateFile /etc/httpd/conf.d/ssl/httpd.crt
#指定私鑰
SSLCertificateKeyFile /etc/httpd/conf.d/ssl/httpd.key
#指定CA的路徑 默認該行是註釋狀態的
SSLCACertificateFile /etc/httpd/conf.d/ssl/cacert.pem
重啟服務
service httpd restart
註意:ssl會話只能基於IP創建,這意味著如果服務器僅有一個IP,那麽僅為一個虛擬主機提供https服務
http 高級配置 虛擬主機,https 編譯安裝