Apacheのコンパイルとインストール、共通設定
Apacheのコンパイルとインストール、共通設定
httpd-2.4 のコンパイルとインストール
apache と、apache が依存する必要な rpm パッケージをダウンロードします。
[root@localhost ~]# wget https://archive.apache.org/dist/apr/apr-1.7.0.tar.bz2
--2021-04-20 19:50:58-- https://archive.apache.org/dist/apr/apr-1.7.0.tar.bz2
Resolving archive.apache.org (archive.apache.org)... 138.201.131.134, 2a01:4f8:172:2ec5::2
Connecting to archive.apache.org (archive.apache.org)|138.201.131.134|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 872238 (852K) [application/x-bzip2]
Saving to: 'apr-1.7.0.tar.bz2'
apr-1.7.0.tar.b 100%[=======>] 851.79K 714KB/s in 1.2s
2021-04-20 19:51:00 (714 KB/s) - 'apr-1.7.0.tar.bz2' saved [872238/872238]
[root@localhost ~]# wget https://archive.apache.org/dist/apr/apr-util-1.6.1.tar.bz2
--2021-04-20 19:51:34-- https://archive.apache.org/dist/apr/apr-util-1.6.1.tar.bz2
Resolving archive.apache.org (archive.apache.org)... 138.201.131.134, 2a01:4f8:172:2ec5::2
Connecting to archive.apache.org (archive.apache.org)|138.201.131.134|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 428595 (419K) [application/x-bzip2]
Saving to: 'apr-util-1.6.1.tar.bz2'
apr-util-1.6.1. 100% [=======>] 418.55K 227KB/s in 1.8s
2021-04-20 19:51:36 (227 KB/s) - 'apr-util-1.6.1.tar.bz2' saved [428595/428595]
[root@localhost ~]# wget https://archive.apache.org/dist/httpd/httpd-2.4.43.tar.bz2
--2021-04-20 19:53:30-- https://archive.apache.org/dist/httpd/httpd-2.4.43.tar.bz2
Resolving archive.apache.org (archive.apache.org)... 138.201.131.134, 2a01:4f8:172:2ec5::2
Connecting to archive.apache.org (archive.apache.org)|138.201.131.134|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 7155865 (6.8M) [application/x-bzip2]
Saving to: 'httpd-2.4.43.tar.bz2'
httpd-2.4.43.ta 100%[=======>] 6.82M 1.58MB/s in 5.6s
2021-04-20 19:53:37 (1.21 MB/s) - 'httpd-2.4.43.tar.bz2' saved [7155865/7155865]
[root@localhost ~]# ls
anaconda-ks.cfg apr-util-1.6.1.tar.bz2
apr-1.7.0.tar.bz2 httpd-2.4.43.tar.bz2
コンパイラのインストール、必要なツールなど。
[root@localhost ~]# dnf -y install gcc gcc-c++ pcre-devel zlib-devel openssl openssl-devel make expat-devel libtool
rpmパッケージの解凍
[root@localhost ~]# tar xf apr-1.7.0.tar.bz2
[root@localhost ~]# tar xf apr-util-1.6.1.tar.bz2
[root@localhost ~]# tar xf httpd-2.4.43.tar.bz2
[root@localhost ~]# ls
anaconda-ks.cfg apr-util-1.6.1 httpd-2.4.43.tar.bz2
apr-1.7.0 apr-util-1.6.1.tar.bz2
apr-1.7.0.tar.bz2 httpd-2.4.43
httpd は apr-util-1.6.1 に依存し、apr-util-1.6.1 は apr-1.7.0 に依存しているので、インストール順序は apr-1.7.0, apr-util-1.6.1, httpd-2.4.43 となります。
pr-1.7.0 の configure で RM "$cfgfile" を削除またはコメントアウトする。
apr-1.7.0のビルド環境をテストします。
[root@localhost apr-1.7.0]# . /configure --prefix=/usr/local/apr
apr-1.7.0をコンパイルしてインストールします。
[root@localhost apr-1.7.0]# make
[root@localhost apr-1.7.0]# make install
apr-util-1.6.1.tar.bz2 のビルド環境を確認する。
[root@localhost apr-util-1.6.1]# . /configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
apr-util-1.6.1のコンパイルとインストール
[root@localhost apr-util-1.6.1]# make
[root@localhost apr-util-1.6.1]# make install
apacheのビルド環境を確認し、必要な機能を設定します。
[root@localhost httpd-2.4.43]# . /configure --prefix=/usr/local/apache \
--sysconfdir=/etc/httpd24 \
--enable-so \
--enable-ssl \
--enable-cgi \
--enable-rewrite \
--with-zlib \
--with-pcre \
--with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr-util/ \
--enable-modules=most \
--enable-mpms-shared=all \
--with-mpm=prefork
apacheのコンパイルとインストール
[root@localhost httpd-2.4.43]# make
[root@localhost httpd-2.4.43]# make install
httpd.service ファイルに以下のコードを記述し、etc/systemd/system/ ディレクトリに格納します。
[root@localhost system]# vim /etc/systemd/system/httpd.service
Description=Start httpd
[Service]
Type=simple
EnvironmentFile=/etc/httpd24/httpd.conf
ExecStart=/usr/local/apache/bin/httpd -k start -DFOREGROUND
ExecReload=/usr/local/apache/bin/httpd -k graceful
ExecStop=/bin/kill -WINCH ${MAINPID}
[Install]
WantedBy=multi-user.target
apacheを起動します。
[root@localhost system]# systemctl start httpd
[root@localhost system]# systemctl status httpd
httpd.service
Loaded: loaded (/etc/systemd/system/httpd.service; disabled;>
Active: active (running) since Tue 2021-04-20 20:34:47 CST; >
Main PID: 53212 (httpd)
Tasks: 6 (limit: 8756)
Memory: 4.9M
CGroup: /system.slice/httpd.service
├─53212 /usr/local/apache/bin/httpd -k start -DFOREG>
├─53213 /usr/local/apache/bin/httpd -k start -DFOREG>
├─53214 /usr/local/apache/bin/httpd -k start -DFOREG>
├─53215 /usr/local/apache/bin/httpd -k start -DFOREG>
├─53216 /usr/local/apache/bin/httpd -k start -DFOREG>
└─53217 /usr/local/apache/bin/httpd -k start -DFOREG>
Apr 20 20:34:47 localhost.localdomain systemd[1]: Started http>
Apr 20 20:34:47 localhost.localdomain httpd[53212]: AH00558: h>
ファイアウォールとselinuxをオフにする
[root@localhost ~]# systemctl disable firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
80番ポートが開いているかどうか確認する
[root@localhost system]# ss -anlt
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 *:80 *:*
LISTEN 0 128 [::]:22 [::]:*
Apacheの共通設定
ソースインストールの場合、httpdコマンドが見つからないため、直接使用することができません。etc/profile.d/ ディレクトリに httpd.sh スクリプトを作成し、そこに apache インストールの絶対パス(環境変数の設定)を記述する必要があります。
MPMへの切り替え(/etc/httpd/conf.modules.d/00-ppm.confファイルを編集します。)
動作モードは次の3つです。
- プリフォーク
- イベント
- ワーカー
コンパイルしてインストールすると、モデルが設定され、変更できなくなりますが、設定を変更することは可能です
[root@localhost /]# vim /etc/httpd24/extra/httpd-mpm.conf
......
StartServers 5 //Start five processes at startup
MinSpareServers 5 // start a minimum of five processes
MaxSpareServers 10 //Start up to ten processes
MaxRequestWorkers 250 //Request process connections up to 250
MaxConnectionsPerChild 0 //maximum number of connections per child process, 0 means no limit
......
アクセス制御に関する法律。
<テーブル 法 機能 全ての付与を要求する すべてのホストへのアクセスを許可する 全拒否を要求する すべてのホストからのアクセスを拒否する ip IPADDRを要求する 指定された送信元アドレスを持つホストへのアクセスを許可する IPADDRでないことを要求する 指定された送信元アドレスを持つホストからのアクセスを拒否する 必要なホスト HOSTNAME 指定されたソースホスト名を持つホストへのアクセスを許可します。 ホストでないことを要求する HOSTNAME 指定された送信元ホスト名のホストへのアクセスを拒否する <テーブル IPADDRの種類 HOSTNAMEの種類 ip: 192.168.1.1ネットワーク/マスク 192.168.1.0/255.255.255.0
ネットワーク/長さ: 192.168.1.0/24
ネット 192.168 FQDN:特定ホストのフルネーム
DOMAIN:指定されたドメインに含まれるすべてのホスト
注意:httpd-2.4はデフォルトですべてのホストへのアクセスを拒否しているので、後でインストールするときは認証されたアクセスを表示する必要があります。
例
<Directory /var/www/html/www> //directory address
<RequireAll>
Require not ip 192.168.1.20 //deny ip access to 192.168.1.20
Require all granted //All host access allowed
</RequireAll>
</Directory>
<Directory />
AllowOverride none
Require all denied //Deny access to all hosts
</Directory>
<Directory "/usr/local/apache/htdocs"> //httpd's site's root directory
Options Indexes FollowSymLinks
Require all granted //All hosts are allowed to access
</Directory>
ウェブホストの設定
バーチャルホストの種類は3つあります。
- 同じIPで異なるポート
- 異なるIP、同じポート
- 同じIPアドレス、同じポート、異なるドメイン名(一般的な方法)。
設定する前にバーチャルホストを設定する
まず、メイン設定ファイルの vhosts.conf 行のコメントを解除して、apache の httpd-vhosts.conf を有効にします。
[root@localhost htdocs]# vim /etc/httpd24/httpd.conf
Include /etc/httpd24/extra/httpd-vhosts.conf
httpd-vhosts.conf 設定パラメータの意味
<VirtualHost *:80> //virtual host address and port number
ServerAdmin [email protected] //admin email
DocumentRoot "/usr/local/apache/docs/dummy-host.example.com" //root directory of the website
ServerName dummy-host.example.com //the domain name of the website
ServerAlias www.dummy-host.example.com // Alias of the website
ErrorLog "logs/dummy-host.example.com-error_log" //error log storage address, logs in the apache root directory
CustomLog "logs/dummy-host.example.com-access_log" common (fixed write) //logs for normal access
</VirtualHost>
同じipでも、以下のようにポート設定するとうまくいきません。
同じipで異なるポートを持つバーチャルホストを設定する
<VirtualHost *:80>
DocumentRoot "/usr/local/apache/htdocs/test1"
ServerName test1.com
ErrorLog "logs/test1.com-error_log"
CustomLog "logs/test1.com-access_log" common
</VirtualHost>
listen 81
<VirtualHost *:81>
DocumentRoot "/usr/local/apache/htdocs/test2"
ServerName test2.com
ErrorLog "logs/test2.com-error_log"
CustomLog "logs/test2.com-access_log" common
</VirtualHost>
サービスを再起動し、同じIPと異なるポートからアクセスします。
[root@localhost htdocs]# systemctl restart httpd
[root@localhost htdocs]# ss -anlt
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 *:80 *:*
LISTEN 0 128 *:81 *:*
LISTEN 0 128 [::]:22 [::]:*
テストページです。
異なるip同一ポートの設定方法。
まず、NICに2つのipを設定し、NICを再起動します。
[root@localhost htdocs]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# ls
ifcfg-ens33
[root@localhost network-scripts]# vim ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR1=192.168.247.137
PREFIX1=24
GATEWAY=192.168.247.2
DNS1=114.114.114.114
IPADDR2=192.168.247.100
PREFIX2=24
[root@localhost network-scripts]# ifdown ens33;ifup ens33
[root@localhost network-scripts]# 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: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:4b:b2:69 brd ff:ff:ff:ff:ff:ff:ff
inet 192.168.247.137/24 brd 192.168.247.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 192.168.247.100/24 brd 192.168.247.255 scope global secondary noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe4b:b269/64 scope link
valid_lft forever preferred_lft forever
異なるIPと同じポートを持つバーチャルホストを設定し、サービスを再起動します。
[root@localhost htdocs]# vim /etc/httpd24/extra/httpd-vhosts.conf
<VirtualHost 192.168.247.137:80>
DocumentRoot "/usr/local/apache/htdocs/test1"
ServerName test1.com
ErrorLog "logs/test1.com-error_log"
CustomLog "logs/test1.com-access_log" common
</VirtualHost>
<VirtualHost 192.168.247.100:80>
DocumentRoot "/usr/local/apache/htdocs/test2"
ServerName test2.com
ErrorLog "logs/test2.com-error_log"
CustomLog "logs/test2.com-access_log" common
</VirtualHost>
root@localhost htdocs]# systemctl restart httpd
テストページです。
ドメイン名が以下のように設定されている場合、同じip同じportは動作しません。
同一ip同一portのドメイン名なし設定。
[root@localhost htdocs]# vim /etc/httpd24/extra/httpd-vhosts.conf
<VirtualHost 192.168.247.137:80>
DocumentRoot "/usr/local/apache/htdocs/test1"
ServerName test1.com
ErrorLog "logs/test1.com-error_log"
CustomLog "logs/test1.com-access_log" common
</VirtualHost>
<VirtualHost 192.168.247.100:80>
DocumentRoot "/usr/local/apache/htdocs/test2"
ServerName test2.com
ErrorLog "logs/test2.com-error_log"
CustomLog "logs/test2.com-access_log" common
</VirtualHost>
<VirtualHost 192.168.247.100:80>
DocumentRoot "/usr/local/apache/htdocs/test3"
ServerName test3.com
ErrorLog "logs/test3.com-error_log"
CustomLog "logs/test3.com-access_log" common
</VirtualHost>
[root@localhost htdocs]# systemctl restart httpd
バーチャルホストのドメイン名をローカルで解決するために、hostsファイルを修正します。
C:³³をデスクトップにドラッグし、管理者として開き、ドメイン名とipを以下のフォーマットで記述します。
192.168.247.100 test2.com test3.com
最後に、hosts ファイルをドラッグして元のディレクトリに戻します。
テストページです。
CA証明書の設定(https)
ssl モジュールを有効にする。
etc/httpd24/httpd.confファイルを編集し、以下の2行を見つけてコメントを解除してください。
LoadModule ssl_module modules/mod_ssl.so
Include /etc/httpd24/extra/httpd-ssl.conf
httpd-ssl.confファイルのパラメータの意味
<VirtualHost _default_:443>
# General setup for the virtual host
DocumentRoot "/usr/local/apache/htdocs" //root of https site
ServerName www.example.com:443 //domain name
ServerAdmin [email protected] //administrator email
ErrorLog "/usr/local/apache/logs/error_log" // path to error log file
TransferLog "/usr/local/apache/logs/access_log" //correct log file path
httpd-ssl.conf設定ファイルを修正します。
<VirtualHost _default_:443>
# General setup for the virtual host
DocumentRoot "/usr/local/apache/htdocs/test2"
ServerName test2.com:443
ErrorLog "/usr/local/apache/logs/test2.com-error_log"
TransferLog "/usr/local/apache/logs/test2.com-access_log"
......
SSLCertificateFile "/etc/httpd24/httpd.crt" //set the certificate placement address
......
SSLCertificateKeyFile "/etc/httpd24/httpd.key" //Set the certificate placement address
......
を変更した後に構文エラーをチェックします。
[root@localhost network-scripts]# apachectl -t
AH00526: Syntax error on line 92 of /etc/httpd24/extra/httpd-ssl.conf:
SSLSessionCache: 'shmcb' session cache not supported (known names: ). Maybe you need to load the appropriate socache module (mod_socache_shmcb?).
[root@localhost network-scripts]# vim /etc/httpd24/extra/httpd-ssl.conf
#SSLSessionCache "shmcb:/usr/local/apache/logs/ssl_scache
(512000)"
//because there is no /usr/local/apache/logs/ssl_scache file just comment it out
//compile again with an error because our certificate has not yet been generated to the target directory
CAが生成した鍵
[root@localhost CA]# mkdir private
[root@localhost CA]# (umask 077;openssl genrsa -out private/cakey.pem 2048)
Generating RSA private key, 2048 bit long modulus (2 primes)
........................ +++++
............... +++++
e is 65537 (0x010001)
CAが自己署名入り証明書を生成
[root@localhost CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365
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
State or Province Name (full name) []:HB
Locality Name (eg, city) [Default City]:WH
Organization Name (eg, company) [Default Company Ltd]:ha
Organizational Unit Name (eg, section) []:ha
Common Name (eg, your name or your server's hostname) []:test2.com
Email Address []:[email protected]
クライアント側で生成されたキー
[root@localhost CA]# mkdir certs newcerts crl
[root@localhost CA]# touch index.txt && echo 01 > serial
[root@localhost CA]# (umask 077;openssl genrsa -out httpd.key 2048)
Generating RSA private key, 2048 bit long modulus (2 primes)
............................. +++++
.......................................................................................................................................... +++++
e is 65537 (0x010001)
クライアントが証明書署名要求を生成
[root@localhost CA]# openssl req -new -key httpd.key -days 365 -out httpd.csr
Ignoring -days; not generating a certificate
You are about to be asked to enter information that will be incorporated
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
State or Province Name (full name) []:HB
Locality Name (eg, city) [Default City]:WH
Organization Name (eg, company) [Default Company Ltd]:ha
Organizational Unit Name (eg, section) []:ha
Common Name (eg, your name or your server's hostname) []:test2.com
Email Address []:[email protected]
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
CA は、クライアントから提出された証明書に署名する
[root@localhost CA]# openssl ca -in httpd.csr -out httpd.crt -days 365
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 1 (0x1)
Validity
Not Before: Apr 27 09:28:43 2021 GMT
Not After : Apr 27 09:28:43 2022 GMT
Subject:
countryName = CN
stateOrProvinceName = HB
organizationName = ha
organizationalUnitName = ha
commonName = test2.com
emailAddress = [email protected]
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
70:0C:C7:BB:B4:AB:09:53:3D:2A:97:CA:3A:C9:78:F9:C5:7B:99:3E
X509v3 Authority Key Identifier:
keyid:B0:D2:2C:1C:EE:3D:D5:75:E8:A7:09:DF:04:DA:48:50:50:DE:42:6E
Certificate is to be certified until Apr 27 09:28:43 2022 GMT (365 days)
Sign the certificate?
1 out of 1 certificate requests certified, commit?
Write out database with 1 new entries
Data Base Updated
証明書をセットディレクトリに移動する
[root@localhost CA]# mv httpd.key httpd.crt /etc/httpd24/
[root@localhost CA]# systemctl restart httpd
テストページです。
関連
-
gcc コンパイル時にオペランドがバイナリに変換されない -解決方法
-
Haproxy の「502 Bad Gateway サーバーが無効または不完全な応答を返しました」を解決する。
-
makeの問題解決。*** ターゲットが指定されておらず、makefileも見つかりません。
-
テキストファイルのビジー状態
-
VMware16でWin10システムをインストール
-
linux awk命令详解
-
CentOS7 crontabが実行されない、エラー /bin/sh: root: コマンドが見つかりません。
-
Linux共通コマンド(非常に充実しています)
-
courseraのログインはできるが、ビデオが再生できない問題を解決する。
-
サーバーを開始できません。接続できませんでした。接続拒否
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
AttributeError: Linux上のFLASKプロジェクトでデータベースに接続すると、属性を設定できない
-
AttributeError: モジュール 'tensorflow' には 'get_default_graph' という属性がありません。
-
ソケットプログラミング、エラーの原因 ソケット以外でのソケット操作
-
linux ubuntu 'string' はこのスコープで宣言されていない Parse
-
jmeterツールです。JMETER_HOME 環境変数が定義されていない 問題解決
-
ImportErrorです。yum という名前のモジュールがないエラー
-
LinuxカーネルOOM機構の詳細解析
-
chownとchomdはLinuxのパーミッションを変更します。
-
Linux出现Bash . configure permission denied错误
-
random: crng init doneでアプリケーションの起動が遅くなる問題