インフラ

Apache2.4系のインストール方法

更新日

Apacheのインストール

CentOS系の為yumを使っていますが、Ubuntuの場合はそこをapt-getに差し替えて下さい。

yes | sudo yum install httpd;
yes | sudo yum install httpd-devel;
sudo systemctl restart httpd.service;

/usr/sbin/httpd -v;

sudo systemctl enable httpd.service;
ps -deafw|grep httpd

と打って、httpdプロセスの存在を確認。

http://$IPアドレス/

にアクセスしてWebサーバの作動を確認。

外部からアクセスできない場合は、まずはサーバーの中で

wget -S -U test http://localhost/

と打って、正常にクロールできるか確認。

それで正常にクロールできる場合には、ファイヤーウォールがブロックしているという事になるので、ファイヤーウォールの設定を確認する。

Webコンソールの方でFirewallが提供されている場合にはそちらの方の設定を確認。

そうでない場合には、サーバ上でファイヤーウォールのprocessが走っていないか確認。

systemctl status firewalld.service

動いていて、一旦止めても問題なければ

systemctl stop firewalld.service;

そしてアクセスしてみて、Webサイトが見えればO.K。
後で適切にFirewallの設定をし直して

systemctl start firewalld.service;

で実行を再開しましょう。

WordPressやLaravelといったウェブフレームワークを使う場合、.htaccessの機能を活用する必要がある為、

sudo sed -i -e 's/AllowOverride [Nn]one/AllowOverride All/g' /etc/httpd/conf/httpd.conf ;

後、httpd.conf内の

<Directory "/var/www/html">

のディレクトリが、対象ディレクトリを含むレベルに変更する必要がある。

httpd.confの編集が終わったら

sudo apachectl restart;

で変更を反映


ドメインの取得と割り当て

お名前.com、AWSなどと契約して、DNSレコード名に対してIPアドレスを割り当てる形で名前解決できるようにする。

ウェブサーバーの方でhttpd.confを触って、VirtualHostのセクションを定義しておく。
これは後で設定するSSLの為にも必要。

<VirtualHost *:80>
ServerName gloval.jp
DocumentRoot /var/www/html
</VirtualHost>

無料でhttpsでアクセスできるようにする

Let’s encryptのクライアントをインストール

wget https://dl.eff.org/certbot-auto;
chmod a+x certbot-auto;
mv ./certbot-auto /usr/local/bin/;

割り当ててるドメインを-dで指定。

certbot-auto run --apache -d dev.sakuhindb.com;

その後、単一でドメインとかを追加するのなら

. ~/.bash_profile;/usr/local/bin/certbot-auto certonly --apache --non-interactive --agree-tos -m $EMAIL --no-self-upgrade --post-hook "/usr/sbin/apachectl graceful" -d rentalserverhikaku.com

という形で($EMAILは自分のLet’s EncryptのログインEmailで)

vi /etc/httpd/conf/httpd-le-ssl.conf 

<VirtualHost *:443>
ServerName $DOMANNAME
DocumentRoot $DOCUMENTROOT
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/$DOMANNAME/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/$DOMANNAME/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/$DOMANNAME/chain.pem
</VirtualHost>

という形で証明書へのパスを通して($DOMANNAMEと$DOCUMENTROOTは自分の環境に合わせて調整)

apachectl restart;

で反映

後、自動的に証明書が更新されるように、cronに設定する。

crontab -e

と打って

15 * * * * /usr/local/bin/certbot-auto renew -q --no-self-upgrade --post-hook "/usr/sbin/apachectl graceful";

といった行を追加する。

vi /etc/httpd/conf/httpd.conf
<VirtualHost *:80>
ServerName blog.minakoe.jp
RewriteEngine on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

Include /etc/httpd/conf/httpd-le-ssl.conf

SELinuxの無効化

WebサーバーからDBへのアクセスだけ許可するには、Webサーバー側で

setsebool -P httpd_can_network_connect_db 1

色々面倒なのでSELinuxの機能自体を無効化するには

setenforce 0;
vi /etc/selinux/config

して

SELINUX=disabled

Firewallの設定

firewall-cmd --list-all --permanent;
firewall-cmd --zone=public --add-service=http --permanent;
firewall-cmd --zone=public --add-service=https --permanent;

開発環境等の為Basic認証をかけたい場合

sudo htpasswd -c /etc/httpd/conf/.htpasswd $UserID

でパスワードファイルを作り

<Location />
    AuthType Basic
    AuthName "Basic Auth"
    AuthUserFile /etc/httpd/conf/.htpasswd
    Require valid-user
</Location>

をhttpd.confに追加してサーバーを再起動