1. 程式人生 > >http 高級配置 虛擬主機,https 編譯安裝

http 高級配置 虛擬主機,https 編譯安裝

第一個 genrsa 方法 website efi set con 因此 跳轉

目錄

  • http 高級配置 虛擬主機,https 編譯安裝
    • http 重定向 https
      • HSTS
      • HSTS preload list
    • http 自帶的工具程序
    • httpd的壓力測試工具
    • 實現狀態頁
    • 反向代理功能
    • 虛擬主機
      • 配置格式
      • 基於IP的虛擬主機配置
      • 基於端口的虛擬主機配置
      • 基於FQDN(主機頭)的虛擬主機
    • 搭建Https
      • 創建CA服務器
      • 為服務器申請證書
      • web服務器安裝ssl 模塊

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

Temp:Returns a temporary redirect status (302). This is the default

配置示例:

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 編譯安裝