62196


Apacheで2つのドメイン（片方はサブドメイン）を扱おうと思っています．  
例として，`hogehoge.com`，`sub.hogehoge.com`を使うとします．  
`httpd.conf`の設定は以下のようにしました．（モジュールやSSL，ディレクトリなどの設定は省略してます）

[code]

    ServerRoot "/etc/httpd"
    ServerAdmin root@localhost
    ServerName hogehoge.com:80
    
    DocumentRoot "/var/www/html"
    
    <VirtualHost *:80>
    ServerAdmin root@localhost
    ServerName hogehoge.com
    DocumentRoot "/var/www/html"
    </VirtualHost>
    
    <VirtualHost *:80>
    ServerAdmin root@localhost
    ServerName sub.hogehoge.com
    DocumentRoot "/var/www/html/sub"
    </VirtualHost>
    
[/code]

しかし，この状態で`https://sub.hogehoge.com`にアクセスすると，`/var/www/html`直下の`index.html`が呼び出されます．

どのようにすれば`hogehoge.com`と`sub.hogehoge.com`で違うディレクトリ直下にある`index.html`を呼び出すことができるでしょうか．  
よろしくお願いいたします．

**試したこと**  
グローバルにある`DocumentRoot`をコメントアウトしてみたところ，`https://hogehoge.com`および`https://sub.hogehoge.com`ともに以下のエラーが見られました．

[code]

    Not Found
    The requested URL / was not found on this server.
    
[/code]

**環境**

[code]

    CentOS
    Apache/2.4.6
    ConohaVPS
    
[/code]

**追記**  
`hogehoge.com`と`sub.hogehoge.com`に対応する`<VirtualHost
*:443>`をそれぞれ作成することにより，ドメインそれぞれに対してアクセスすることができるようになりました．  
しかし，`hogehoge.com`はstatus200が返ってくるのですが，`sub.hogehoge.com`はstatus400(Bad
Request)が以下のように返ってきます．

[code]

    Bad Request
    Your browser sent a request that this server could not understand.
    
[/code]

logに関して確認できる限りでは以下のものが全てです．

↓`sub.hogehoge.com`の`<VirtualHost *:443>`内に定義したCustomLog(acces log)

[code]

    [10/Jan/2020:15:13:46 +0900] "GET / HTTP/1.1" 400 226
    [10/Jan/2020:15:13:46 +0900] "GET /favicon.ico HTTP/1.1" 400 226
    
[/code]

また，`systemctl restart httpd`をした際に以下のErrorLogが吐き出されます．

[code]

    [Fri Jan 10 15:26:04.921556 2020] [mpm_prefork:notice] [pid 16494] AH00170: caught SIGWINCH, shutting down gracefully
    [Fri Jan 10 15:26:06.054996 2020] [suexec:notice] [pid 22003] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
    [Fri Jan 10 15:26:06.058198 2020] [ssl:warn] [pid 22003] AH02292: Init: Name-based SSL virtual hosts only work for clients with TLS server name indication support (RFC 4366)
    [Fri Jan 10 15:26:06.087758 2020] [lbmethod_heartbeat:notice] [pid 22003] AH02282: No slotmem from mod_heartmonitor
    [Fri Jan 10 15:26:06.089915 2020] [ssl:warn] [pid 22003] AH02292: Init: Name-based SSL virtual hosts only work for clients with TLS server name indication support (RFC 4366)
    [Fri Jan 10 15:26:06.092847 2020] [mpm_prefork:notice] [pid 22003] AH00163: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips configured -- resuming normal operations
    [Fri Jan 10 15:26:06.092877 2020] [core:notice] [pid 22003] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'
    
[/code]

`sub.hogehoge.com`内に定義したErrorLogには何も吐き出されていませんでした．

ブラウザでのクッキー・キャッシュの消去をしてみてもダメでした．ドメインにアンダースコアは入ってません．

以下，`<VirtualHost *:443>`内の設定内容です．

[code]

    ServerAdmin root@localhost
    ServerName sub.hogehoge.com
    DocumentRoot "/var/www/html/sub"
    
    SSLCertificateFile /path/to/cert.pem
    SSLCertificateKeyFile /path/to/privkey.pem
    SSLCertificateChainFile /path/to/chain.pem
    Include /path/to/options-ssl-apache.conf
    
    <Directory "/var/www/html/sub">
        Options Indexes FollowSymLinks
        AllowOverride None
        Options -MultiViews
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^ index.html [QSA,L]
        Require all granted
    </Directory>
    
    ErrorLog /path/to/sub.hogehoge.com_ssl-error_log
    CustomLog /path/to/sub.hogehoge.com_access_log common
    </VirtualHost>
    
[/code]

`options-ssl-apache.conf`はletsencryptで自動生成されたファイルです．  
証明書に関してですが，`certbot`で複数ドメイン用に作成しました．  
以下のコマンドを用いてます．

[code]

    certbot certonly --webroot -w /var/www/html -d hogehoge.com -w /var/www/html/sub -d sub.hogehoge.com
    
[/code]

ログに関してですが，`LogLevel`の設定が`warn`になっていたのを見落としていました．  
`debug`にしたところ，`sub.hogehoge.com`で以下のログが出ました．

[code]

    [Sat Jan 11 14:28:08.251943 2020] [ssl:info] [pid 2641] AH02200: Loading certificate & private key of SSL-aware server 'sub.hogehoge.com:443'
    [Sat Jan 11 14:28:08.252167 2020] [ssl:debug] [pid 2641] ssl_engine_pphrase.c(506): AH02249: unencrypted RSA private key - pass phrase not required
    [Sat Jan 11 14:28:08.253066 2020] [ssl:info] [pid 2641] AH01914: Configuring server sub.hogehoge.com:443 for SSL protocol
    [Sat Jan 11 14:28:08.253330 2020] [ssl:debug] [pid 2641] ssl_engine_init.c(886): AH01904: Configuring server certificate chain (1 CA certificate)
    [Sat Jan 11 14:28:08.253341 2020] [ssl:debug] [pid 2641] ssl_engine_init.c(406): AH01893: Configuring TLS extension handling
    [Sat Jan 11 14:28:08.253346 2020] [ssl:debug] [pid 2641] ssl_engine_init.c(933): AH02232: Configuring RSA server certificate
    [Sat Jan 11 14:28:08.253436 2020] [ssl:debug] [pid 2641] ssl_util_ssl.c(495): AH02412: [sub.hogehoge.com:443] Cert matches for name 'sub.hogehoge.com' [subject: CN=hogehoge.com / issuer: CN=Let's Encrypt Authority X3,O=Let's Encrypt,C=US / serial: 03B8393E700A4CC807D4D47CD0328F1A1EF6 / notbefore: Jan 11 04:15:40 2020 GMT / notafter: Apr 10 04:15:40 2020 GMT]
    [Sat Jan 11 14:28:08.253444 2020] [ssl:debug] [pid 2641] ssl_engine_init.c(988): AH02236: Configuring RSA server private key
    [Sat Jan 11 14:28:08.279947 2020] [ssl:info] [pid 2641] AH02200: Loading certificate & private key of SSL-aware server 'sub.hogehoge.com:443'
    [Sat Jan 11 14:28:08.280118 2020] [ssl:debug] [pid 2641] ssl_engine_pphrase.c(506): AH02249: unencrypted RSA private key - pass phrase not required
    [Sat Jan 11 14:28:08.281044 2020] [ssl:info] [pid 2641] AH01914: Configuring server sub.hogehoge.com:443 for SSL protocol
    [Sat Jan 11 14:28:08.281276 2020] [ssl:debug] [pid 2641] ssl_engine_init.c(886): AH01904: Configuring server certificate chain (1 CA certificate)
    [Sat Jan 11 14:28:08.281286 2020] [ssl:debug] [pid 2641] ssl_engine_init.c(406): AH01893: Configuring TLS extension handling
    [Sat Jan 11 14:28:08.281291 2020] [ssl:debug] [pid 2641] ssl_engine_init.c(933): AH02232: Configuring RSA server certificate
    [Sat Jan 11 14:28:08.281364 2020] [ssl:debug] [pid 2641] ssl_util_ssl.c(495): AH02412: [sub.hogehoge.com:443] Cert matches for name 'sub.hogehoge.com' [subject: CN=hogehoge.com / issuer: CN=Let's Encrypt Authority X3,O=Let's Encrypt,C=US / serial: 03B8393E700A4CC807D4D47CD0328F1A1EF6 / notbefore: Jan 11 04:15:40 2020 GMT / notafter: Apr 10 04:15:40 2020 GMT]
    [Sat Jan 11 14:28:08.281370 2020] [ssl:debug] [pid 2641] ssl_engine_init.c(988): AH02236: Configuring RSA server private key
    
    [Sat Jan 11 14:28:11.083026 2020] [ssl:debug] [pid 2645] ssl_engine_kernel.c(225): [client 126.36.223.227:35878] AH02034: Initial (No.1) HTTPS request received for child 3 (server sub.hogehoge.com:443)
    [Sat Jan 11 14:28:11.083296 2020] [ssl:debug] [pid 2645] ssl_engine_io.c(993): [client 126.36.223.227:35878] AH02001: Connection closed to child 3 with standard shutdown (server sub.hogehoge.com:443)
    [Sat Jan 11 14:28:11.169854 2020] [ssl:debug] [pid 2643] ssl_engine_kernel.c(225): [client 126.36.223.227:35876] AH02034: Initial (No.1) HTTPS request received for child 1 (server sub.hogehoge.com:443), referer: https://sub.hogehoge.com/
    [Sat Jan 11 14:28:11.170514 2020] [ssl:debug] [pid 2643] ssl_engine_io.c(993): [client 126.36.223.227:35876] AH02001: Connection closed to child 1 with standard shutdown (server sub.hogehoge.com:443)
    
[/code]


CC BY-SA 4.0
2020-01-09T20:33:18.407
62116
2020-01-12T19:44:25.100
2020-01-11T05:47:32.690
29506
29506
question
apache
ApacheでVirtualHostのDocumentRootがうまくいかない


Taichi Yanagiyaさんコメントに付き合って頂きありがとうございました．  
一応自己解決に至ったので解答します．

色々いじくり回していたので「これが原因だ」とあまり断定できないのですが，おそらく以下が原因であったと考えられます．

1つ目

[code]

    <VirtualHost>内に直接    
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^ index.html [QSA,L]
    を書き込んでいた
    
[/code]

追記では`<Directory>`内に書き込んでいたのですが，いじくり回している間に抜かしてしまったみたいです．凡ミスで申し訳ございません．．．  
以後，しっかりバックアップを取りつつデバッグしていくことにします．

2つ目

[code]

    証明書のCN
    
[/code]

Taichi
Yanagiyaさんの仰ったとおり，今一度CNを確認したところ両方共メインドメインになっていました．どうやら私の証明書の取り方が悪かったみたいです．  
`-d`オプションで同時にドメインを指定せず，2回に分けて行うと別々のCNで証明書を発行することができました．  
「有料証明書使えよ」って思った方，ごもっともです．．．

3つ目

[code]

    react-routerでBrouserRouterを使うとビルド時にnpm run buildを使ってもうまくビルドできない
    
[/code]

これはサーバの話と関係なくなってしまうのですが，今回勉強になったので一応載せておきます．（おそらくBadRequestとは関係ないですが，ページが真っ白のままの場合は疑う余地あり）  
react-routerV4から上記のような使用になったらしいです．webpackとか使えばbuildできるみたい？  
試してみます．

思い当たるのは以上ですが，改めて簡単なミスばっかりで申し訳ないです．  
Apacheはほぼ初心者なのでお手柔らかにしていただけるとありがたいです．


CC BY-SA 4.0
2020-01-12T19:44:25.100
62196
2020-01-12T19:44:25.100
29506
62116
answer