HTTPD(apache)WEBサーバ——HTTP基本配置(三)
続:HTTP基本配置二指令クイックインデックス公式サイト
実験環境
httpdソフトをyumでインストールして、デフォルトのindex.1ページを設定して、テストを開始します.ここではインストールを最小化するためのcentos 8システムを使用しています.ファイアウォールとselinuxを閉じます.ホストビットのcentos 8、対応IPは192.168.3.38である.
トラック禁止方法
httpdは、1つの物理ホスト上で複数のウェブサイトを実現することをサポートしています.すなわち、マルチ仮想ホストサイトの一意の識別:IPは同じですが、ポートが異なるIPは異なりますが、ポートはすべてデフォルトのポートです.
FQDNは違っています.マルチ仮想ホストは、少なくとも1つのipアドレスを用意するipベースのipベースのipアドレスを用意しています.ポートに基づいて、仮想ホストごとに少なくとも1つの独立したポートを使用します.FQDNに基づいて、仮想ホストごとに少なくとも1つのFQDNを使用します.レポートのヘッダHost:likai.tech注意:http 2.4バージョンで、FQDNベースの仮想ホストは、もはやNameVirutalHost命令仮想ホストの基本的な構成方法を必要としない.
その他の一般的な利用可能なコマンド:
例:IPベースの仮想ホスト
例:FQDN仮想ホストに基づく
ここでは同じサブドメインの192.168.3.2.7ホストでホストセンター8にアクセスし、ホスト192.168.3.2.7に対応する/etc/hostsファイルを配置する.
圧縮
概要を詰める
mod_を使うdeflateモジュール圧縮ページは伝送速度を最適化します.
ブラウザ圧縮モジュールをロードするかどうかを確認します.
https(443ポート)を実現します.
(1)クライアントは、選択可能な暗号化方式を送信し、証明書(2)サーバ側に証明書を送信し、選択された暗号化方式をクライアント(3)クライアントに証明書を取得し、証明書を発行するCAを信頼している場合、証明書を発行する
(1)証明書の出所の合法性を検証する.CAの公開鍵で証明書のデジタル署名(2)を解読し、証明書の内容の正当性を検証する:完全性検証(3)証明書の有効期限を確認する(4)証明書が破棄されたかどうかを確認する(5)証明書の所有者の名前は、訪問先ホストと一致すること.
(4)クライアントは、一時セッション鍵(対称鍵)を生成し、サーバ端の公開鍵を用いてこのデータを暗号化してサーバに送信し、鍵交換(5)サービスを完了してこの鍵でユーザ要求のリソースを暗号化し、クライアントに応答する.
注意:SSLはIPアドレスに基づいて実現され、シングルIPのhttpdホストは、1つのhttps仮想ホストのみが使用可能です.
mod_を取り付けますsslパッケージ
自分で証明書を作成して、https機能を設定します.これまでの実験に基づいて、自分で作成したCAファイルを使って、centos 8の中/etc/pki/tls/certs/Makefileはもうなくなりました.Makefileファイルは直接に自分で作成したCAを生成するのに役立ちます.だからここで私たちはcentos 7:192.168.3.2.7の中からcentos 8:192.168.3.38の中にコピーします.
複数の仮想ホストサイトを実現し、apacheはサポートできません.
URLリダイレクト
URLリダイレクト、httpd要求のURLを他のURLリダイレクトコマンドに転送します.
temp:一時リダイレクト状態コード302を返します.これはデフォルトの値の例です.
HSTSを実現
HSTS:HTTP Strict Transport Securityは、サーバ端にHSTS対応を配置すると、ブラウザに返されるHTTPヘッダにHSTSフィールドを携帯する.ブラウザがこの情報を取得すると、すべてのHTTPアクセス要求を内部で307してHTTPSに遷移させます.任意のネットワークプロセスを必要とせず、より高いセキュリティを実現するHSTS preload list:ChromeブラウザのHSTSプリロードリストであり、リストのウェブサイトでは、Chromeブラウザを使用してアクセスすると、自動的にHTTPSに変換されます.Firefox、Safari、Edgeブラウザもこのリストの例を採用します.
順方向プロキシと逆方向プロキシ
は、逆エージェントを有効にする.
Sendfileメカニズム
sendfileを使わない従来のネットワーク転送プロセス:read(file,tmpuf,len)write(socket,tmpubf,len)ハードディスク>>kersnel buffer>>kersnel socket buffer>プロトコルスタック一般ネットワークアプリケーションはハードディスクデータを読むことによって、socketにデータを書いてネットワーク転送を完了します.コンテキスト切り替えが発生します.user modeからkernel modeに切り替えて、DMAはコピーを実行して、ファイルデータをハードディスクからケネルバfferに読みます.2データをkersnel bufferからuser bufferにコピーしてシステムがreadを呼び出して戻ると、もう一つのコンテキストが発生します.kersnel modeからuser mode 3システムに切り替えてwriteを呼び出すと、user modeからkernel modeに切り替えて、ステップ2をuser bufferのデータに読んで、ker nelbufferにコピーします.(2回目のデータコピーはケネル・バffer)ですが、今回は違うケネル・バfferです.このバfferはsocketと関連しています.4系統はwriteを呼び出して戻ります.ケネル・モードからusermode(4回目の切り替え)に切り替えて、DMAはケネル・バfferからプロトコル・スタック(4回目のコピー)にデータをコピーします.上の4つのステップは4回のコンテキスト切り替えがあり、4回のコピーがあります.切替回数とコピー回数を減らすことができれば、効果的に性能を向上させます.
Sendfile機構は、kersnel 2.0+バージョンにおいて、システムがsendfileを呼び出すことは、上述のステップのパフォーマンス向上を簡略化することによって使用される.sendfileは、スイッチング回数を減らすだけでなく、コピー回数を減らすことができるsendfileでネットワーク転送を行うプロセス:sendfile(socket、file、file、len);ハードディスク>kersnel buffer>>プロトコルスタック1システム呼び出しsendfile()DMAによってハードディスクのデータをkersnel bufferにコピーした後、kersnelによって直接に別のkersnel bufferにコピーされます.ここではuser modeとkersnel modeの切り替えがなく、kersnelで直接に一つのbufferからもう一つのfferまでのコピー2 DMAデータを完成しました.データも必要ないです.アメリカからケネルモードにコピーします.データはケネルにあります.
セントロ8のsendfileモジュールを確認します.
方法1:
方法2
上の実験では、私たちはバックミュージックの検証を実現しました.これからはもう一つの構成を利用して、同じ機能を実現します.
前の実験でのユーザID認証方式は単一のユーザに基づいています.今は前のデモンストレーションに基づいて、ユーザーグループのBaicを使って検証を続けています.
実験環境
httpdソフトをyumでインストールして、デフォルトのindex.1ページを設定して、テストを開始します.ここではインストールを最小化するためのcentos 8システムを使用しています.ファイアウォールとselinuxを閉じます.ホストビットのcentos 8、対応IPは192.168.3.38である.
[root@centos8 ~]#ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:a5:39:58 brd ff:ff:ff:ff:ff:ff
inet 192.168.32.8/24 brd 192.168.32.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
[root@centos8 ~]#cat /etc/redhat-release
CentOS Linux release 8.0.1905 (Core)
[root@centos8 ~]#
[root@centos8 ~]#firewall-cmd --state
not running
[root@centos8 ~]#
[root@centos8 ~]#getenforce
Disabled
[root@centos8 ~]#yum list httpd*
Last metadata expiration check: 3 days, 9:43:01 ago on Sun 08 Dec 2019 05:11:56 AM CST.
Available Packages
httpd.x86_64 2.4.37-12.module_el8.0.0+185+5908b0db centos8
httpd-devel.x86_64 2.4.37-12.module_el8.0.0+185+5908b0db centos8
httpd-filesystem.noarch 2.4.37-12.module_el8.0.0+185+5908b0db centos8
httpd-manual.noarch 2.4.37-12.module_el8.0.0+185+5908b0db centos8
httpd-tools.x86_64 2.4.37-12.module_el8.0.0+185+5908b0db centos8
[root@centos8 ~]#dnf install httpd -y
[root@centos8 ~]#rpm -qi httpd
Name : httpd
Version : 2.4.37
Release : 12.module_el8.0.0+185+5908b0db
Architecture: x86_64
Install Date: Wed 11 Dec 2019 02:55:14 PM CST
Group : System Environment/Daemons
Size : 5148135
License : ASL 2.0
Signature : RSA/SHA256, Thu 10 Oct 2019 05:33:32 AM CST, Key ID 05b555b38483c65d
Source RPM : httpd-2.4.37-12.module_el8.0.0+185+5908b0db.src.rpm
Build Date : Tue 08 Oct 2019 05:42:59 AM CST
Build Host : x86-01.mbox.centos.org
Relocations : (not relocatable)
Packager : CentOS Buildsys <[email protected]>
Vendor : CentOS
URL : https://httpd.apache.org/
Summary : Apache HTTP Server
Description :
The Apache HTTP Server is a powerful, efficient, and extensible
web server.
[root@centos8 ~]#ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
[root@centos8 ~]#systemctl start httpd
[root@centos8 ~]#ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 0.0.0.0:80 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
[root@centos8 ~]#echo "This is a HTTPD(apache) test for kaivi" > /var/www/html/index.html
[root@centos8 ~]#curl 192.168.32.8
This is a HTTPD(apache) test for kaivi
トラック禁止方法
TraceEnable [on|off|extended]
Traceメソッドをサポートしているかどうかは、デフォルトはonで、セキュリティリスクに基づいて、サンプルを閉じることを提案します.[root@centos8 ~]#vim /etc/httpd/conf.d/test.conf
[root@centos8 ~]#cat /etc/httpd/conf.d/test.conf
TraceEnable off
[root@centos8 ~]#
[root@centos8 ~]#curl -IX OPTIONS http://127.0.0.1
HTTP/1.1 200 OK
Date: Thu, 12 Dec 2019 13:07:47 GMT
Server: Apache/2.4.37 (centos)
Allow: GET,POST,OPTIONS,HEAD,TRACE # TRACE
Content-Length: 0
Content-Type: text/html; charset=UTF-8
[root@centos8 ~]#systemctl reload httpd
[root@centos8 ~]#curl -IX OPTIONS http://127.0.0.1
HTTP/1.1 200 OK
Date: Thu, 12 Dec 2019 13:08:26 GMT
Server: Apache/2.4.37 (centos)
Allow: GET,POST,OPTIONS,HEAD # TRACE
Content-Length: 0
Content-Type: text/html; charset=UTF-8
[root@centos8 ~]#
マルチ仮想ホストhttpdは、1つの物理ホスト上で複数のウェブサイトを実現することをサポートしています.すなわち、マルチ仮想ホストサイトの一意の識別:IPは同じですが、ポートが異なるIPは異なりますが、ポートはすべてデフォルトのポートです.
FQDNは違っています.マルチ仮想ホストは、少なくとも1つのipアドレスを用意するipベースのipベースのipアドレスを用意しています.ポートに基づいて、仮想ホストごとに少なくとも1つの独立したポートを使用します.FQDNに基づいて、仮想ホストごとに少なくとも1つのFQDNを使用します.レポートのヘッダHost:likai.tech注意:http 2.4バージョンで、FQDNベースの仮想ホストは、もはやNameVirutalHost命令仮想ホストの基本的な構成方法を必要としない.
<VirtualHost IP:PORT>
ServerName FQDN
DocumentRoot “/path"
</VirtualHost>
提案:上記の構成は独立した構成ファイルに保存されています.その他の一般的な利用可能なコマンド:
ServerAlias: ;
ErrorLog:
CustomLog:
<Directory “/path"> </Directory>
例:ポートベースの仮想ホスト[root@centos8 ~]#mkdir /data/website{1,2,3}
[root@centos8 ~]#echo "This is NO.1 website!" > /data/website1/index.html
[root@centos8 ~]#echo "This is NO.2 website!" > /data/website2/index.html
[root@centos8 ~]#echo "This is NO.3 website!" > /data/website3/index.html
[root@centos8 ~]#tree /data/
/data/
├── website1
│ └── index.html
├── website2
│ └── index.html
└── website3
└── index.html
3 directories, 3 files
[root@centos8 ~]#vim /etc/httpd/conf.d/test.conf
[root@centos8 ~]#cat /etc/httpd/conf.d/test.conf
listen 8001
listen 8002
listen 8003
<virtualhost *:8001> #
documentroot /data/website1/ #
CustomLog logs/website1_access.log combined #
<directory /data/website1> #
require all granted
</directory>
</virtualhost>
<virtualhost *:8002>
documentroot /data/website2/
CustomLog logs/website2_access.log combined
<directory /data/website2>
require all granted
</directory>
</virtualhost>
<virtualhost *:8003>
documentroot /data/website3/
CustomLog logs/website3_access.log combined
<directory /data/website3>
require all granted
</directory>
</virtualhost>
[root@centos8 ~]#systemctl restart httpd
[root@centos8 ~]#[root@centos8 ~]#ll /var/log/httpd/ #
total 24
-rw-r--r-- 1 root root 2084 Dec 12 21:41 access_log
-rw-r--r-- 1 root root 4441 Dec 12 21:40 error_log
-rw-r--r-- 1 root root 506 Dec 12 21:42 website1_access.log
-rw-r--r-- 1 root root 506 Dec 12 21:43 website2_access.log
-rw-r--r-- 1 root root 570 Dec 12 21:44 website3_access.log
[root@centos8 ~]#
[root@centos8 ~]#curl 192.168.32.8:8001
This is NO.1 website!
[root@centos8 ~]#curl 192.168.32.8:8002
This is NO.2 website!
[root@centos8 ~]#curl 192.168.32.8:8003
This is NO.3 website!
[root@centos8 ~]#
は、ユーザが毎回ポート番号を入力することはないので、内部の従業員に適しています.例:IPベースの仮想ホスト
[root@centos8 ~]#ip a a 192.168.32.18/24 dev eth0
[root@centos8 ~]#ip a a 192.168.32.28/24 dev eth0
[root@centos8 ~]#ip a a 192.168.32.38/24 dev eth0
[root@centos8 ~]#ip a
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:a5:39:58 brd ff:ff:ff:ff:ff:ff
inet 192.168.32.8/24 brd 192.168.32.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet 192.168.32.18/24 scope global secondary eth0
valid_lft forever preferred_lft forever
inet 192.168.32.28/24 scope global secondary eth0
valid_lft forever preferred_lft forever
inet 192.168.32.38/24 scope global secondary eth0
valid_lft forever preferred_lft forever
[root@centos8 ~]#
[root@centos8 ~]#vim /etc/httpd/conf.d/test.conf
[root@centos8 ~]#cat /etc/httpd/conf.d/test.conf
<virtualhost *:80>
ServerName www.aaa.com
documentroot /data/website1/
CustomLog logs/website1_access.log combined
<directory /data/website1>
require all granted
</directory>
</virtualhost>
<virtualhost *:80>
ServerName www.bbb.com
documentroot /data/website2/
CustomLog logs/website2_access.log combined
<directory /data/website2>
require all granted
</directory>
</virtualhost>
<virtualhost *:80>
ServerName www.ccc.com
documentroot /data/website3/
CustomLog logs/website3_access.log combined
<directory /data/website3>
require all granted
</directory>
</virtualhost>
[root@centos8 ~]#systemctl reload httpd
[root@centos8 ~]#curl 192.168.32.18
This is NO.1 website!
[root@centos8 ~]#curl 192.168.32.28
This is NO.2 website!
[root@centos8 ~]#curl 192.168.32.38
This is NO.3 website!
例:FQDN仮想ホストに基づく
ここでは同じサブドメインの192.168.3.2.7ホストでホストセンター8にアクセスし、ホスト192.168.3.2.7に対応する/etc/hostsファイルを配置する.
[root@centos7 ~]#vim /etc/hosts
[root@centos7 ~]#cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.32.18 www.aaa.com
192.168.32.28 www.bbb.com
192.168.32.38 www.ccc.com
[root@centos7 ~]#curl 192.168.32.8
This is a HTTPD(apache) test for kaivi
[root@centos7 ~]#curl www.aaa.com
This is NO.1 website!
[root@centos7 ~]#curl www.bbb.com
This is NO.2 website!
[root@centos7 ~]#curl www.ccc.com
This is NO.3 website!
[root@centos7 ~]#
[root@centos7 ~]#
アクセスは正常に行われていると見られますが、ページサイトが一つあると特定のipでアクセスすることはできません.これも現実的ではありません.したがって、同じIPを使って、DNS解析で区別して、ヘッダのホストヘッダ情報を使うことができます.各ブラウザが入力したドメイン名にはキーパッドがHOSTに対してあります.ホストヘッドは違います.ホストヘッドで区別します.[root@centos8 ~]#vim /etc/httpd/conf.d/test.conf
[root@centos8 ~]#cat /etc/httpd/conf.d/test.conf
<virtualhost *:80>
ServerName www.aaa.com #
documentroot /data/website1/
CustomLog logs/website1_access.log combined
<directory /data/website1>
require all granted
</directory>
</virtualhost>
<virtualhost *:80>
ServerName www.bbb.com
documentroot /data/website2/
CustomLog logs/website2_access.log combined
<directory /data/website2>
require all granted
</directory>
</virtualhost>
<virtualhost *:80>
ServerName www.ccc.com
documentroot /data/website3/
CustomLog logs/website3_access.log combined
<directory /data/website3>
require all granted
</directory>
</virtualhost>
[root@centos8 ~]#systemctl reload httpd
centos7:192.168.32.7
[root@centos7 ~]#curl www.aaa.com
This is NO.1 website!
[root@centos7 ~]#curl www.bbb.com
This is NO.2 website!
[root@centos7 ~]#curl www.ccc.com
This is NO.3 website!
[root@centos7 ~]#
# telnet
[root@centos7 ~]#telnet 192.168.32.8 80
Trying 192.168.32.8...
Connected to 192.168.32.8.
Escape character is '^]'.
GET / HTTP/1.1
HOST: www.aaa.com
HTTP/1.1 200 OK
Date: Fri, 13 Dec 2019 01:39:38 GMT
Server: Apache/2.4.37 (centos)
Last-Modified: Fri, 13 Dec 2019 01:25:50 GMT
ETag: "16-5998bbdffe7d0"
Accept-Ranges: bytes
Content-Length: 22
Content-Type: text/html; charset=UTF-8
This is NO.1 website! #
Connection closed by foreign host.
[root@centos7 ~]#telnet 192.168.32.8 80
Trying 192.168.32.8...
Connected to 192.168.32.8.
Escape character is '^]'.
GET / HTTP/1.1
HOST: www.bbb.com
HTTP/1.1 200 OK
Date: Fri, 13 Dec 2019 01:40:21 GMT
Server: Apache/2.4.37 (centos)
Last-Modified: Fri, 13 Dec 2019 01:25:59 GMT
ETag: "16-5998bbe80f2f7"
Accept-Ranges: bytes
Content-Length: 22
Content-Type: text/html; charset=UTF-8
This is NO.2 website! #
Connection closed by foreign host.
[root@centos7 ~]#telnet 192.168.32.8 80
Trying 192.168.32.8...
Connected to 192.168.32.8.
Escape character is '^]'.
GET / HTTP/1.1
HOST: www.ccc.com
HTTP/1.1 200 OK
Date: Fri, 13 Dec 2019 01:40:39 GMT
Server: Apache/2.4.37 (centos)
Last-Modified: Fri, 13 Dec 2019 01:26:07 GMT
ETag: "16-5998bbf030ba7"
Accept-Ranges: bytes
Content-Length: 22
Content-Type: text/html; charset=UTF-8
This is NO.3 website! #
Connection closed by foreign host.
[root@centos7 ~]#
注意:任意のディレクトリの下のページは明示的に許可されているだけで、3つの方式の仮想ホストにアクセスすることができます.圧縮
概要を詰める
mod_を使うdeflateモジュール圧縮ページは伝送速度を最適化します.
LoadModule deflate_module modules/mod_deflate.so SetOutputFilter
適用シーン:(1)帯域幅を節約し、CPUを追加消費する.同時に、いくつかの古いブラウザは、テキストファイルなどの圧縮に適したリソースをサポートしていないかもしれない.ブラウザ圧縮モジュールをロードするかどうかを確認します.
[root@centos8 ~]#httpd -M |grep deflate
deflate_module (shared)
[root@centos8 ~]#
, 。
圧縮コマンド#
SetOutputFilter DEFLATE
# MIME ,
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/css
# (Highest 9 - Lowest 1) , gzip
DeflateCompressionLevel 9
# ,
#Netscape 4.x text/html
BrowserMatch ^Mozilla/4 gzip-only-text/html
#Netscape 4.06-08
BrowserMatch ^Mozilla/4\.0[678] no-gzip
#Internet Explorer “Mozilla / 4”, 。
“MSIE”(“B” ”),
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
圧縮比較実験[root@centos8 ~]#vim /etc/httpd/conf.d/test.conf
[root@centos8 ~]#cat /etc/httpd/conf.d/test.conf
<virtualhost *:80>
documentroot /data/website1/
servername www.aaa.com
<directory /data/website1/>
require all granted
</directory>
CustomLog "logs/a_access_log" combined
AddOutputFilterByType DEFLATE text/plain #
AddOutputFilterByType DEFLATE text/html #
DeflateCompressionLevel 9 #
</virtualhost>
<virtualhost *:80>
documentroot /data/website2/
servername www.bbb.com
<directory /data/website2/>
require all granted
</directory>
CustomLog "logs/a_access_log" combined
#AddOutputFilterByType DEFLATE text/plain #
#AddOutputFilterByType DEFLATE text/html #
#DeflateCompressionLevel 9 #
</virtualhost>
[root@centos8 ~]#vim /etc/hosts
[root@centos8 ~]#cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.32.8 www.aaa.com www.bbb.com # DNS
[root@centos8 ~]#
[root@centos8 ~]#cp blog.txt /data/website1/blog_test1.html #
[root@centos8 ~]#cp blog.txt /data/website2/blog_test2.html
[root@centos8 ~]#cd /data/website1
[root@centos8 website1]#ll
total 20
-rw-r--r-- 1 root root 15422 Dec 13 10:14 blog_test1.html # 15422
-rw-r--r-- 1 root root 22 Dec 13 09:25 index.html
[root@centos8 website1]#cd /data/website2
[root@centos8 website2]#ll
total 20
-rw-r--r-- 1 root root 15422 Dec 13 10:14 blog_test2.html # 15422
-rw-r--r-- 1 root root 22 Dec 13 09:25 index.html
644 :
chmod 644 blog_testX.html
[root@centos8 website2]#cd
[root@centos8 ~]#systemctl restart httpd
[root@centos8 ~]#curl www.aaa.com
This is NO.1 website!
[root@centos8 ~]#curl www.bbb.com
This is NO.2 website!
[root@centos8 ~]#curl -I --compressed www.aaa.com/blog_test1.html # curl , --compressed
HTTP/1.1 200 OK
Date: Fri, 13 Dec 2019 02:22:29 GMT
Server: Apache/2.4.37 (centos)
Last-Modified: Fri, 13 Dec 2019 02:14:32 GMT
ETag: "3c3e-5998c6c2c195b-gzip"
Accept-Ranges: bytes
Vary: Accept-Encoding
Content-Encoding: gzip # gzip
Content-Length: 2155 #
Content-Type: text/html; charset=UTF-8
[root@centos8 ~]#curl -I --compressed www.bbb.com/blog_test2.html
HTTP/1.1 200 OK
Date: Fri, 13 Dec 2019 02:22:45 GMT
Server: Apache/2.4.37 (centos)
Last-Modified: Fri, 13 Dec 2019 02:14:45 GMT
ETag: "3c3e-5998c6ce8741a"
Accept-Ranges: bytes
Content-Length: 15422 # , website2
Content-Type: text/html; charset=UTF-8
比較によると、圧縮機能はwebsite 1のみで実現されています.https(443ポート)を実現します.
(1)クライアントは、選択可能な暗号化方式を送信し、証明書(2)サーバ側に証明書を送信し、選択された暗号化方式をクライアント(3)クライアントに証明書を取得し、証明書を発行するCAを信頼している場合、証明書を発行する
(1)証明書の出所の合法性を検証する.CAの公開鍵で証明書のデジタル署名(2)を解読し、証明書の内容の正当性を検証する:完全性検証(3)証明書の有効期限を確認する(4)証明書が破棄されたかどうかを確認する(5)証明書の所有者の名前は、訪問先ホストと一致すること.
(4)クライアントは、一時セッション鍵(対称鍵)を生成し、サーバ端の公開鍵を用いてこのデータを暗号化してサーバに送信し、鍵交換(5)サービスを完了してこの鍵でユーザ要求のリソースを暗号化し、クライアントに応答する.
注意:SSLはIPアドレスに基づいて実現され、シングルIPのhttpdホストは、1つのhttps仮想ホストのみが使用可能です.
mod_を取り付けますsslパッケージ
[root@centos8 ~]#yum install mod_ssl
Last metadata expiration check: 1:14:34 ago on Fri 13 Dec 2019 09:38:41 AM CST.
Dependencies resolved.
===================================================================================================================
Package Arch Version Repository Size
===================================================================================================================
Installing:
mod_ssl x86_64 1:2.4.37-12.module_el8.0.0+185+5908b0db centos8 130 k
Installing dependencies:
sscg x86_64 2.3.3-6.el8 centos8 43 k
Transaction Summary
===================================================================================================================
Install 2 Packages
Total download size: 173 k
Installed size: 351 k
Is this ok [y/N]: y
Downloading Packages:
(1/2): sscg-2.3.3-6.el8.x86_64.rpm 36 kB/s | 43 kB 00:01
(2/2): mod_ssl-2.4.37-12.module_el8.0.0+185+5908b0db.x86_64.rpm 105 kB/s | 130 kB 00:01
-------------------------------------------------------------------------------------------------------------------
Total 139 kB/s | 173 kB 00:01
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : sscg-2.3.3-6.el8.x86_64 1/2
Installing : mod_ssl-1:2.4.37-12.module_el8.0.0+185+5908b0db.x86_64 2/2
Running scriptlet: mod_ssl-1:2.4.37-12.module_el8.0.0+185+5908b0db.x86_64 2/2
Verifying : mod_ssl-1:2.4.37-12.module_el8.0.0+185+5908b0db.x86_64 1/2
Verifying : sscg-2.3.3-6.el8.x86_64 2/2
Installed:
mod_ssl-1:2.4.37-12.module_el8.0.0+185+5908b0db.x86_64 sscg-2.3.3-6.el8.x86_64
Complete!
[root@centos8 ~]#cd /etc/httpd/conf.d/
[root@centos8 conf.d]#ll
total 32
-rw-r--r-- 1 root root 2926 Oct 8 05:42 autoindex.conf
-rw-r--r-- 1 root root 400 Oct 8 05:44 README
-rw-r--r-- 1 root root 8720 Oct 8 05:40 ssl.conf
-rw-r--r-- 1 root root 621 Dec 13 10:26 test.conf
-rw-r--r-- 1 root root 1252 Oct 8 05:40 userdir.conf
-rw-r--r-- 1 root root 516 Oct 8 05:40 welcome.conf
[root@centos8 conf.d]#
[root@centos8 conf.d]#cd
[root@centos8 ~]#
[root@centos8 ~]#systemctl restart httpd
[root@centos8 ~]#
[root@centos8 ~]#ss -ntl # https:443
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 0.0.0.0:443 0.0.0.0:*
LISTEN 0 128 0.0.0.0:80 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
[root@centos8 ~]#curl -kv https://192.168.32.8
* Rebuilt URL to: https://192.168.32.8/
* Trying 192.168.32.8...
* TCP_NODELAY set
* Connected to 192.168.32.8 (192.168.32.8) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
......
* ALPN, server accepted to use http/1.1
* Server certificate:
* subject: C=US; O=Unspecified; CN=centos8; emailAddress=root@centos8
* start date: Dec 13 02:54:19 2019 GMT
os8
* SSL certificate verify result: self signed certificate in certificate chain (19), continuing anyway.
* TLSv1.3 (OUT), TLS app data, [no content] (0):
> GET / HTTP/1.1
> Host: 192.168.32.8
> User-Agent: curl/7.61.1
> Accept: */*
>
* TLSv1.3 (IN), TLS handshake, [no content] (0):
* TLSv1.3 (IN), TLS app data, [no content] (0):
< HTTP/1.1 200 OK
< Date: Fri, 13 Dec 2019 02:55:07 GMT
< Server: Apache/2.4.37 (centos) OpenSSL/1.1.1
< Last-Modified: Fri, 13 Dec 2019 01:26:34 GMT
< ETag: "27-5998bc0a040e5"
< Accept-Ranges: bytes
< Content-Length: 39
< Content-Type: text/html; charset=UTF-8
<
This is a HTTPD(apache) test for kaivi
* Connection #0 to host 192.168.32.8 left intact
[root@centos8 ~]#
httpsサービスのインストールに成功しました.ブラウザで確認してください.https://192.168.32.8 はアクセスできますが、権威のあるCA証明書がないので、上記のような場合があります.自分で証明書を作成して、https機能を設定します.これまでの実験に基づいて、自分で作成したCAファイルを使って、centos 8の中/etc/pki/tls/certs/Makefileはもうなくなりました.Makefileファイルは直接に自分で作成したCAを生成するのに役立ちます.だからここで私たちはcentos 7:192.168.3.2.7の中からcentos 8:192.168.3.38の中にコピーします.
[root@centos7 ~]#cd /etc/pki/tls/certs/
[root@centos7 certs]#ll
total 12
lrwxrwxrwx. 1 root root 49 Dec 5 21:43 ca-bundle.crt -> /etc/pki/ca-trust/extracted/pem/tls-ca-
bundle.pem
lrwxrwxrwx. 1 root root 55 Dec 5 21:43 ca-bundle.trust.crt -> /etc/pki/ca-trust/extracted/openssl/ca-
bundle.trust.crt
-rwxr-xr-x. 1 root root 610 Oct 31 2018 make-dummy-cert
-rw-r--r--. 1 root root 2516 Oct 31 2018 Makefile # CA
-rwxr-xr-x. 1 root root 829 Oct 31 2018 renew-dummy-cert
[root@centos7 certs]#scp Makefile 192.168.32.8:/etc/pki/tls/certs/
The authenticity of host 192.168.32.8 (192.168.32.8)' can't be established.
ECDSA key fingerprint is SHA256:ofG5ch7HSw0hxj2Ef76oh4WuOnpubsABj0/YiNrGqYw.
ECDSA key fingerprint is MD5:cc:68:4d:5c:63:31:d1:62:2b:f9:d4:b5:fc:5e:1d:7c.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.32.8' (ECDSA) to the list of known hosts.
[email protected]'s password:
Makefile 100% 2516 1.2MB/s 00:00
その後、centos 8:192.168.3.38にCAを作成します.[root@centos8 ~]#cd /etc/pki/tls/certs/
[root@centos8 certs]#ll
total 4
lrwxrwxrwx. 1 root root 49 May 11 2019 ca-bundle.crt -> /etc/pki/ca-trust/extracted/pem/tls-ca-
bundle.pem
lrwxrwxrwx. 1 root root 55 May 11 2019 ca-bundle.trust.crt -> /etc/pki/ca-trust/extracted/openssl/ca-
bundle.trust.crt
-rw-r--r-- 1 root root 3737 Dec 13 11:32 localhost.crt # mod_ssl
-rw-r--r-- 1 root root 2516 Dec 13 11:30 Makefile
ここで直接Makefileファイルを使うと暗号化されたパスワードが入力されます.ここで実験してまずそれをキャンセルします.[root@centos8 certs]#vim Makefile
%.key:
umask 77 ; \
# /usr/bin/openssl genrsa -aes128 $(KEYLEN) > $@ # -aes128
/usr/bin/openssl genrsa $(KEYLEN) > $@
CAの作成[root@centos8 certs]#make magedu.org.crt
umask 77 ; \
/usr/bin/openssl genrsa 2048 > magedu.org.key # Key
Generating RSA private key, 2048 bit long modulus (2 primes)
....+++++
..................+++++
e is 65537 (0x010001)
umask 77 ; \
/usr/bin/openssl req -utf8 -new -key magedu.org.key -x509 -days 365 -out magedu.org.crt
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN #CN
State or Province Name (full name) []:beijing #beijing
Locality Name (eg, city) [Default City]:beijing #beijing
Organization Name (eg, company) [Default Company Ltd]:magedu # magedu
Organizational Unit Name (eg, section) []:M39 # M39
Common Name (eg, your name or your server's hostname) []:likai.tech #CA
Email Address []:
[root@centos8 certs]#ll
total 16
lrwxrwxrwx. 1 root root 49 May 11 2019 ca-bundle.crt -> /etc/pki/ca-trust/extracted/pem/tls-ca-
bundle.pem
lrwxrwxrwx. 1 root root 55 May 11 2019 ca-bundle.trust.crt -> /etc/pki/ca-trust/extracted/openssl/ca-
bundle.trust.crt
-rw------- 1 root root 1334 Dec 13 11:33 magedu.org.crt # CA
-rw------- 1 root root 1679 Dec 13 11:33 magedu.org.key # KEY
-rw-r--r-- 1 root root 2509 Dec 13 11:32 Makefile
作成CAより確認[root@centos8 certs]#openssl x509 -in magedu.org.crt -noout -text
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
5a:e1:f3:b4:97:69:8b:02:dd:9b:32:5d:4e:ea:ee:61:16:15:12:6f
Signature Algorithm: sha256WithRSAEncryption
Issuer: C = CN, ST = beijing, L = beijing, O = magedu, OU = M39, CN = likai.tech
Validity
Not Before: Dec 13 03:33:52 2019 GMT
Not After : Dec 12 03:33:52 2020 GMT
Subject: C = CN, ST = beijing, L = beijing, O = magedu, OU = M39, CN = likai.tech
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public-Key: (2048 bit)
Modulus:
......
25:ba:24:ce:84:91:e7:c0:bb:24:55:7f:2b:e1:67:84:e2:e2:
1e:1a:f9:14:4f:35:d7:e8:f3:77:34:08:9e:94:a4:f5:2b:ee:
cb:92:72:6e:6f:4d:93:a1:93:52:73:fa:1f:0e:bd:17:42:e6:
81:da:5d:6c:80:a9:51:62:03:dc:7f:07:7e:9e:00:65:3e:b7:
ab:4f:81:8d:79:aa:df:b3:38:05:17:e6:a6:7b:13:c3:fa:7b:
6f:88:30:ea
生成したCAを対応するプロファイルに移動する[root@centos8 certs]#pwd
/etc/pki/tls/certs
[root@centos8 ~]#mkdir /etc/httpd/conf.d/ssl
[root@centos8 certs]#mv magedu.org.* /etc/httpd/conf.d/ssl
[root@centos8 certs]#ls /etc/httpd/conf.d/ssl/
magedu.org.crt magedu.org.key
対応するCAのプロファイルを修正する[root@centos8 certs]#rpm -ql mod_ssl
/etc/httpd/conf.d/ssl.conf
/etc/httpd/conf.modules.d/00-ssl.conf
/usr/lib/.build-id
/usr/lib/.build-id/70/221b67fd81b65321f5220d22dcb99c36d3841c
/usr/lib/systemd/system/httpd-init.service
/usr/lib/systemd/system/httpd.socket.d/10-listen443.conf
/usr/lib64/httpd/modules/mod_ssl.so
/usr/libexec/httpd-ssl-gencerts
/usr/libexec/httpd-ssl-pass-dialog
/usr/share/man/man8/httpd-init.service.8.gz
/var/cache/httpd/ssl
[root@centos8 certs]#cd
[root@centos8 ~]#vim /etc/httpd/conf.d/ssl.conf
[root@centos8 ~]#cat /etc/httpd/conf.d/ssl.conf |grep -Ev "^#|^$"
Listen 443 https #
SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog
SSLSessionCache shmcb:/run/httpd/sslcache(512000)
SSLSessionCacheTimeout 300
SSLCryptoDevice builtin
<VirtualHost _default_:443> #
ErrorLog logs/ssl_error_log #
TransferLog logs/ssl_access_log
LogLevel warn
SSLEngine on
SSLHonorCipherOrder on
SSLCipherSuite PROFILE=SYSTEM
SSLProxyCipherSuite PROFILE=SYSTEM
SSLCertificateFile /etc/httpd/conf.d/ssl/magedu.org.crt # CA /etc/pki/tls/certs/localhost.crt
SSLCertificateKeyFile /etc/httpd/conf.d/ssl/magedu.org.key # key /etc/httpd/conf.d/ssl/magedu.org.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory "/var/www/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-5]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
CustomLog logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>
[root@centos8 ~]#
[root@centos8 ~]#systemctl restart httpd
[root@centos8 ~]#ss -ntl # 443 https
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 0.0.0.0:443 0.0.0.0:*
LISTEN 0 128 0.0.0.0:80 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
[root@centos8 ~]#curl -k https://127.0.0.1
This is a HTTPD(apache) test for kaivi
[root@centos8 ~]#curl -kv https://127.0.0.1 443
* Rebuilt URL to: https://127.0.0.1/
* Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to 127.0.0.1 (127.0.0.1) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, [no content] (0):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, [no content] (0):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, [no content] (0):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, [no content] (0):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, [no content] (0):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use http/1.1
* Server certificate:
* subject: C=CN; ST=beijing; L=beijing; O=magedu; OU=M39; CN=likai.tech #
* start date: Dec 13 03:33:52 2019 GMT
* expire date: Dec 12 03:33:52 2020 GMT
* issuer: C=CN; ST=beijing; L=beijing; O=magedu; OU=M39; CN=likai.tech
* SSL certificate verify result: self signed certificate (18), continuing anyway.
* TLSv1.3 (OUT), TLS app data, [no content] (0):
> GET / HTTP/1.1
> Host: 127.0.0.1
> User-Agent: curl/7.61.1
> Accept: */*
>
* TLSv1.3 (IN), TLS handshake, [no content] (0):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.3 (IN), TLS handshake, [no content] (0):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.3 (IN), TLS app data, [no content] (0):
< HTTP/1.1 200 OK
< Date: Fri, 13 Dec 2019 04:21:40 GMT
< Server: Apache/2.4.37 (centos) OpenSSL/1.1.1
< Last-Modified: Wed, 11 Dec 2019 06:59:00 GMT
< ETag: "27-5996829d3b0b9"
< Accept-Ranges: bytes
< Content-Length: 39
< Content-Type: text/html; charset=UTF-8
<
This is a HTTPD(apache) test for kaivi #
* Connection #0 to host 127.0.0.1 left intact
アクセスページは、自署名証明書であるため、URLが信頼されていません.しかし、CA証明書の構築は成功しました.複数の仮想ホストサイトを実現し、apacheはサポートできません.
URLリダイレクト
URLリダイレクト、httpd要求のURLを他のURLリダイレクトコマンドに転送します.
Redirect [status] URL-path URL
status状態:permant:永久リダイレクト状態コード301を返す.temp:一時リダイレクト状態コード302を返します.これはデフォルトの値の例です.
Redirect temp / https://www.magedu.com/ # /
実験:デフォルトのアクセスページの内容を修正します.これはhttpが暗号化されていない時にアクセスします.[root@centos8 ~]#echo "HTTP " > /var/www/html/index.html
暗号化されたページへのアクセス内容を設定するための新しいフォルダ/data/htmlを作成します.[root@centos8 ~]#mkdir /data/html
[root@centos8 ~]#echo "HTTPS " > /data/html/index.html
[root@centos8 ~]#vim /etc/httpd/conf.d/ssl.conf #
#DocumentRoot "/var/www/html" # ,
DocumentRoot "/data/html" #
<directory /data/html> #
require all granted
</directory>
#ServerName www.example.com:443
[root@centos8 ~]#ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 0.0.0.0:443 0.0.0.0:*
LISTEN 0 128 0.0.0.0:80 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
[root@centos8 ~]#systemctl restart httpd
アクセスページコントラスト: 2つの異なるサイト.実際にこの2つの仮想ホストがアクセスするウェブページは同じであるべきですので、一つのURLアドレスを別のURLアドレスに遷移させるためにジャンプする必要があります.[root@centos8 ~]#vim /etc/httpd/conf.d/test.conf
[root@centos8 ~]#cat /etc/httpd/conf.d/test.conf
Redirect temp / https://192.168.32.8/ # /( ) https://192.168.32.8/
[root@centos8 ~]#systemctl restart httpd
centos 7:192.168.3.2.7に訪問する:[root@centos7 ~]#curl -I -k https://192.168.32.8 # https
HTTP/1.1 302 Found
Date: Fri, 13 Dec 2019 05:41:48 GMT
Server: Apache/2.4.37 (centos) OpenSSL/1.1.1
Location: https://192.168.32.8/
Content-Type: text/html; charset=iso-8859-1
[root@centos7 ~]#curl -I -k http://192.168.32.8 #
HTTP/1.1 302 Found # 302, permanent 301
Date: Fri, 13 Dec 2019 05:39:22 GMT
Server: Apache/2.4.37 (centos) OpenSSL/1.1.1
Location: https://192.168.32.8/ #
Content-Type: text/html; charset=iso-8859-1
[root@centos7 ~]#
またウェブページにアクセスすると、アクセス条件が設定されていないため、どんどんジャンプしてしまい、ジャンプを見逃す回数が多すぎるというヒントがあります.以下のHSTS技術で解決します.HSTSを実現
HSTS:HTTP Strict Transport Securityは、サーバ端にHSTS対応を配置すると、ブラウザに返されるHTTPヘッダにHSTSフィールドを携帯する.ブラウザがこの情報を取得すると、すべてのHTTPアクセス要求を内部で307してHTTPSに遷移させます.任意のネットワークプロセスを必要とせず、より高いセキュリティを実現するHSTS preload list:ChromeブラウザのHSTSプリロードリストであり、リストのウェブサイトでは、Chromeブラウザを使用してアクセスすると、自動的にHTTPSに変換されます.Firefox、Safari、Edgeブラウザもこのリストの例を採用します.
vim /etc/httpd/conf/httpd.conf
Header always set Strict-Transport-Security "max-age=31536000"
# , s
RewriteEngine on
RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=302]
[root@centos8 ~]#vim /etc/httpd/conf.d/test.conf
[root@centos8 ~]#cat /etc/httpd/conf.d/test.conf
#Redirect temp / https://192.168.32.8/ #
Header always set Strict-Transport-Security "max-age=31536000"
RewriteEngine on
RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=302] #
[root@centos8 ~]#
[root@centos8 ~]#systemctl restart httpd
[root@centos8 ~]#
centos 7:192.168.3.2.7に訪問する:[root@centos7 ~]#curl -I -k http://192.168.32.8
HTTP/1.1 302 Found
Date: Fri, 13 Dec 2019 05:52:34 GMT
Server: Apache/2.4.37 (centos) OpenSSL/1.1.1
Location: https://192.168.32.8/
Content-Type: text/html; charset=iso-8859-1
[root@centos7 ~]#
ウェブページの中で調べます:直接192.168.3.38を訪問してジャンプされました.https://192.168.32.8 順方向プロキシと逆方向プロキシ
は、逆エージェントを有効にする.
ProxyPass "/" "http://www.example.com/"
ProxyPassReverse "/" "http://www.example.com/"
特定URL逆プロキシProxyPass "/images" "http://www.example.com/"
ProxyPassReverse "/images" http://www.example.com/
apacheは逆代理機能があっても、ほとんど使っていませんが、この機能があります.別のサーバにスケジュールします.Sendfileメカニズム
sendfileを使わない従来のネットワーク転送プロセス:read(file,tmpuf,len)write(socket,tmpubf,len)ハードディスク>>kersnel buffer>>kersnel socket buffer>プロトコルスタック一般ネットワークアプリケーションはハードディスクデータを読むことによって、socketにデータを書いてネットワーク転送を完了します.コンテキスト切り替えが発生します.user modeからkernel modeに切り替えて、DMAはコピーを実行して、ファイルデータをハードディスクからケネルバfferに読みます.2データをkersnel bufferからuser bufferにコピーしてシステムがreadを呼び出して戻ると、もう一つのコンテキストが発生します.kersnel modeからuser mode 3システムに切り替えてwriteを呼び出すと、user modeからkernel modeに切り替えて、ステップ2をuser bufferのデータに読んで、ker nelbufferにコピーします.(2回目のデータコピーはケネル・バffer)ですが、今回は違うケネル・バfferです.このバfferはsocketと関連しています.4系統はwriteを呼び出して戻ります.ケネル・モードからusermode(4回目の切り替え)に切り替えて、DMAはケネル・バfferからプロトコル・スタック(4回目のコピー)にデータをコピーします.上の4つのステップは4回のコンテキスト切り替えがあり、4回のコピーがあります.切替回数とコピー回数を減らすことができれば、効果的に性能を向上させます.
Sendfile機構は、kersnel 2.0+バージョンにおいて、システムがsendfileを呼び出すことは、上述のステップのパフォーマンス向上を簡略化することによって使用される.sendfileは、スイッチング回数を減らすだけでなく、コピー回数を減らすことができるsendfileでネットワーク転送を行うプロセス:sendfile(socket、file、file、len);ハードディスク>kersnel buffer>>プロトコルスタック1システム呼び出しsendfile()DMAによってハードディスクのデータをkersnel bufferにコピーした後、kersnelによって直接に別のkersnel bufferにコピーされます.ここではuser modeとkersnel modeの切り替えがなく、kersnelで直接に一つのbufferからもう一つのfferまでのコピー2 DMAデータを完成しました.データも必要ないです.アメリカからケネルモードにコピーします.データはケネルにあります.
セントロ8のsendfileモジュールを確認します.
[root@centos8 ~]#cat /etc/httpd/conf/httpd.conf |grep "EnableSendfile"
# EnableMMAP and EnableSendfile: On systems that support it,
# Defaults if commented: EnableMMAP On, EnableSendfile Off
EnableSendfile on #
httpd配置Baic検証方法1:
[root@centos8 ~]#vim /etc/httpd/conf.d/test.conf
[root@centos8 ~]#cat /etc/httpd/conf.d/test.conf
<directory /var/www/html/admin/>
authtype basic
AuthName "admin test for kaivi"
AuthUserFile "/etc/httpd/conf.d/.httpuser" #
Require user kaivi duanxin #
</directory>
[root@centos8 ~]#mkdir -pv /var/www/html/admin #
mkdir: created directory '/var/www/html/admin'
[root@centos8 ~]#
[root@centos8 ~]#echo ' admin tset for kaivi !' > /var/www/html/admin/index.html
[root@centos8 ~]#
[root@centos8 ~]#htpasswd -c /etc/httpd/conf.d/.httpuser kaivi # -c
New password:
Re-type new password:
Adding password for user kaivi
[root@centos8 ~]#htpasswd /etc/httpd/conf.d/.httpuser duanxin # -c
New password:
Re-type new password:
Adding password for user duanxin
[root@centos8 ~]#cat /etc/httpd/conf.d/.httpuser #
kaivi:$apr1$FS/FeT6f$6q46m2TLyCOl8k0Um0J12/
duanxin:$apr1$56bpeN9g$5H22EP5sbnj1CcHcZ4MeT1
[root@centos8 ~]#
[root@centos8 ~]#chmod 600 /etc/httpd/conf.d/.httpuser #
[root@centos8 ~]#
[root@centos8 ~]#setfacl -m u:apache:r /etc/httpd/conf.d/.httpuser #
[root@centos8 ~]#
[root@centos8 ~]#systemctl restart httpd
[root@centos8 ~]#ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 0.0.0.0:80 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
[root@centos8 ~]#curl 192.168.32.8/admin/index.html
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>401 Unauthorized</title>
</head><body>
<h1>Unauthorized</h1>
<p>This server could not verify that you
are authorized to access the document
requested. Either you supplied the wrong
credentials (e.g., bad password), or your
browser doesn t understand how to supply
the credentials required.</p>
</body></html>
[root@centos8 ~]#curl -u kaivi 192.168.32.8/admin/index.html
Enter host password for user 'kaivi': #
<h1> admin tset for kaivi !</h1>
方法2
上の実験では、私たちはバックミュージックの検証を実現しました.これからはもう一つの構成を利用して、同じ機能を実現します.
[root@centos8 ~]#systemctl stop httpd
[root@centos8 ~]#ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
[root@centos8 ~]#vim /etc/httpd/conf.d/test.conf
[root@centos8 ~]#cat /etc/httpd/conf.d/test.conf
<directory /var/www/html/admin/>
# authtype basic
# AuthName "admin test for kaivi"
# AuthUserFile "/etc/httpd/conf.d/.httpuser"
# Require user kaivi duanxin
allowoverride authconfig # .htaccess
</directory>
[root@centos8 ~]#vim /var/www/html/admin/.htaccess
[root@centos8 ~]#cat /var/www/html/admin/.htaccess
authtype basic
AuthName "admin test for kaivi"
AuthUserFile "/etc/httpd/conf.d/.httpuser"
Require user kaivi duanxin #
[root@centos8 ~]#systemctl start httpd
[root@centos8 ~]#ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 0.0.0.0:80 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
[root@centos8 ~]#curl 192.168.32.8/admin/index.html
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>401 Unauthorized</title>
</head><body>
<h1>Unauthorized</h1>
<p>This server could not verify that you
are authorized to access the document
requested. Either you supplied the wrong
credentials (e.g., bad password), or your
browser doesn t understand how to supply
the credentials required.</p>
</body></html>
[root@centos8 ~]#curl -u duanxin 192.168.32.8/admin/index.html
Enter host password for user 'duanxin': #
<h1> admin tset for kaivi !</h1>
[root@centos8 ~]#
グループユーザアクセス設定前の実験でのユーザID認証方式は単一のユーザに基づいています.今は前のデモンストレーションに基づいて、ユーザーグループのBaicを使って検証を続けています.
[root@centos8 ~]#vim /etc/httpd/conf.d/.httpgroup
[root@centos8 ~]#cat /etc/httpd/conf.d/.httpgroup
group1: kaivi # 1
group2: duanxin
[root@centos8 ~]#chown apache. /etc/httpd/conf.d/.httpgroup
[root@centos8 ~]#
[root@centos8 ~]#ll /etc/httpd/conf.d/
total 20
-rw-r--r-- 1 root root 2926 Oct 8 05:42 autoindex.conf
-rw-r--r-- 1 root root 400 Oct 8 05:44 README
-rw-r--r-- 1 root root 197 Dec 13 14:38 test.conf
-rw-r--r-- 1 root root 1252 Oct 8 05:40 userdir.conf
-rw-r--r-- 1 root root 516 Oct 8 05:40 welcome.conf
[root@centos8 ~]#ls -al /etc/httpd/conf.d/
total 28
drwxr-xr-x 2 root root 134 Dec 13 14:45 .
drwxr-xr-x 5 root root 105 Dec 11 14:55 ..
-rw-r--r-- 1 root root 2926 Oct 8 05:42 autoindex.conf
-rw-r--r-- 1 apache apache 30 Dec 13 14:45 .httpgroup
-rw-r-----+ 1 root root 90 Dec 13 14:26 .httpuser
-rw-r--r-- 1 root root 400 Oct 8 05:44 README
-rw-r--r-- 1 root root 197 Dec 13 14:38 test.conf
-rw-r--r-- 1 root root 1252 Oct 8 05:40 userdir.conf
-rw-r--r-- 1 root root 516 Oct 8 05:40 welcome.conf
[root@centos8 ~]#
[root@centos8 ~]#vim /var/www/html/admin/.htaccess
[root@centos8 ~]#cat /var/www/html/admin/.htaccess
authtype basic
AuthName "admin test for kaivi"
AuthUserFile "/etc/httpd/conf.d/.httpuser" #
#Require user kaivi duanxin
AuthGroupFile "/etc/httpd/conf.d/.httpgroup" # 2
Require group group1 # 1 kaivi
[root@centos8 ~]#systemctl restart httpd
[root@centos8 ~]#curl -u kaivi 192.168.32.8/admin/index.html #
Enter host password for user 'kaivi':
<h1> admin tset for kaivi !</h1>
[root@centos8 ~]#curl -u duanxin 192.168.32.8/admin/index.html #
Enter host password for user 'duanxin':
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>401 Unauthorized</title>
</head><body>
<h1>Unauthorized</h1>
<p>This server could not verify that you
are authorized to access the document
requested. Either you supplied the wrong
credentials (e.g., bad password), or your
browser doesn't understand how to supply
the credentials required.</p>
</body></html>