Windows Server 2019でApacheとPHPとMySQLとIISでメールの送信設定とFTPのセットアップ
概要
Windows Server 2019
を使って、下記のセットアップ手順を記載します。
※追記
Windows Server 2022 でも対応可能です。
- IEセキュリティ設定のオフ
- Apache2.4
- PHP7.4
- OpenSSL
- MySQL
- IIS
- メール
- FTP
- Apacheトラブルシュート
IEセキュリティ設定のオフ
IEセキュリティが有効だとファイルのダウンロード等で煩わしいので下記設定でゆるくする。
サーバーマネージャーを起動 > ローカルサーバー > IE セキュリティ強化の構成 > Administratorグループをオフ > IEを再起動
エクスプローラーで隠しファイルと拡張子を表示
Apache
https://www.apachelounge.com/download/
- Apache 2.4.X Win64
- [Apache VS17 Binary] httpd-2.4.X-win64-VS17.zip
インストール
- ダウンロードしたzipを解凍→Apache24フォルダを
C:\\
へコピー bin/httpd
を実行して、ブラウザで localhost:80 でアクセス
環境変数PATHを追加
検索で、環境変数を検索して、環境変数PATHへ新規で下記を追加する。
C:\Apache24\bin
自動起動設定
- 管理者でコマンドプロンプトを起動
- バイナリまでCDして(Pathを通していればそのままでOK)、
httpd.exe -k install
を実行すればサービスへ追加される
もしも、「VCRUNTIME140.dllが見つからない」と出てしまう場合、下記からVisual Studio C++をインストールする。(64bitならx64をインストールする)
Microsoft
Apache再起動用のバッチを作成する
下記を apache_restart.bat
という名前でデスクトップに作成する。
httpd.exe -k start
DocumentRoot配下で.htaccessを有効化
mod_rewriteとSSL関連、mod_deflateのモジュールをアンコメント。
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule ssl_module modules/mod_ssl.so
AllowoverrideをAllにして、DirectoryIndexにindex.phpも加えておく(PHP用)
ServerNameをアンコメントしないと下記エラーが出る。
AH00558: httpd.exe: Could not reliably determine the server's fully qualified domain name, using ::1. Set the 'ServerName' directive globally to suppress this message
DocumentRoot "${SRVROOT}/htdocs"
<Directory "${SRVROOT}/htdocs">
#Options Indexes FollowSymLinks <-- コメントアウトする(ファイル一覧を表示しない)
AllowOverride All
Require all granted
SetOutputFilter DEFLATE
</Directory>
<IfModule dir_module>
DirectoryIndex index.html index.php
</IfModule>
Include conf/extra/httpd-ssl.conf <--- 正しいSSL証明書でないと server.crt に関連してエラーになってApacheが起動できないので、最初はコメントアウトが良い。
下記設定を追加
ServerSignature Off
PHP
PHPのインストール
https://windows.php.net/download から Zipをダウンロード。
対象ファイルは Thread Safe
のものを選択すること(ntsとついていない方でx64となっているもの)。Non Thread Safe
だとApacheにモジュール版に必要なdllが無いので注意。
解凍したphpのフォルダを C:\php
へコピーする。
php.ini-productionをコピーしてphp.iniとする。
下記パラメータの変更。
extension=mbstring
extension=openssl <-- これも有効化しないとphp.iniでOpenSSLがenabledにならない
date.timezone = 'Asia/Tokyo'
upload_max_filesize = 20M
post_max_size = 20M
mbstring.language = Japanese
intl 拡張について
php.ini の extension = intl
を上記で有効化しておく。
phpディレクトリ配下にある icu**.dll をコピーして、Apache\bin 配下にペーストします。
そうすると、phpinfoに intl の項目が表示されます。
PHP5.Xの場合
php.iniで拡張のパスを指定すること。
PHP7以降では不要。
;extension_dir = "./"
↓
extension_dir = "C:\PHP\ext"
Apacheのhttpd.confを管理者としてメモ帳を実行して、下記を実行後、httpdを再起動。
AddHandler application/x-httpd-php .php
PHPIniDir "c:/php"
index.php を設置して <!--?php phpinfo(); ?-->
が表示されることを確認。
phpinfoで確認すること
- mbstring, intl, openssl がenabledになっていること
もしopensslだけがdisabledのままだったら、phpのディレクトリにあるlibcrypt-*
とlibssl*
をApache\bin
配下にコピーしてApacheを再起動する。
OpenSSLのインストール
公式ではビルドが必要な手順となるため、下記からインストーラーをダウンロードしてインストールする。
https://slproweb.com/products/Win32OpenSSL.html
その後、「Program Files」配下にOpenSSL-Win64ディレクトリが出来るので、システムの詳細設定から環境変数PATHに追加して、PATHを通しておく。
PATH
C:\Program Files\OpenSSL-Win64
秘密鍵作成
cd C:Apache24\ssl
openssl genrsa -out server.key 2048
CSR作成
openssl req -new -key server.key -out server.csr
SSL設定
httpd.confで下記をアンコメントする。
httpd-ssl.confで下記を設定する。
SSLバージョンを制限する。
SSLProxyProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
証明書の設定を追加(適宜修正)
SSLCertificateKeyFile "${SRVROOT}/conf/server.key"
#SSLCertificateChainFile "${SRVROOT}/conf/server-ca.crt"
下記をVirtualHostに追記しておく。
#Options Indexes FollowSymLinks
AllowOverride All
Require all granted
SetOutputFilter DEFLATE
</Directory>
MySQL
1.https://dev.mysql.com/downloads/windows/installer/5.7.htmlへアクセスして、インストーラーをダウンロード
2.インストールを実行
インストーラーではFullを指定する。
- root パスワードを設定
- Add User でlocalhostしか接続できないユーザーを作成
my.cnfの変更
C:\ProgramData\MySQL\MySQL Server 5.7\my.ini
のsql-mode
からNO_ZERO_IN_DATE と NO_ZERO_DATE を削除する- [mysqld]で
character-set-server=utf8
を追加 - [mysql]で
default-character-set=utf8
を追加
メール
サーバーマネージャーを起動
役割と機能を追加
役割ベースまたは機能ベースのインストール
対象サーバーの選択
サーバーの役割
ここではそのまま進む
機能でSMTPサーバーを選択
Webサーバーの役割
役割サービス
Webサーバーにチェックがある状態(SMTPサーバーはここで選択されている)
確認画面
インストールには2〜3分かかる。
SMTPサーバーの設定
※注意: Windows Server 2022ではエラーでSMTPが起動しないので、inetsrv配下にあるMetaBase.xmlのRelayIpListを削除すると解決する。
→ バージョンによっては大丈夫な場合があり、逆にRelayIpListを空にするとエラーになることがあるので変更後に保存して一度確認する。
C:\Windows\System32\inetsrv
C:\inetpub\mailroot\Badmail
MetaBase.xmlはIISが動いていると上書きできないため、サービスからIISを一度停止して、ファイルをコピーして修正してから上書きする。
もしも サービス
の一覧に簡易SMTPサービスやIISが無い場合は、サーバーマネージャーの左メニューのIISからIIS管理サービスを停止する。
https://www.kaesakura.com/2022/08/windowsserver2022-smtpserver/
ツールからインターネットインフォメーションサービス(IIS)6.0 マネージャー
SMTP Virtual Server のプロパティを開く
アクセス→中継
中継サーバーに自分のIPアドレスを追加
127.0.0.1が許可になっていることを確認
配信→送信セキュリティ
匿名アクセスが選択されていることを確認してOK
SMTPサーバーを再起動
停止→開始
自動起動設定
inetinfo.exe -k install
動作確認
サーバーマネージャーからtelnetクライアントをインストール
コマンドプロンプトで送信テスト
FTP
1.スタートポタンを右クリックして、コンピューターの管理を開く
2.ローカルユーザーとグループを開いて、ユーザーを右クリックしてユーザーを追加
3.グループを右クリックして追加し、その際に上記で追加したFTPユーザーを所属して作成(FTPGroupなど)
4.DocumentRoot(FTP公開先)のフォルダを右クリックして、上記FTP用グループをフルコントロールで追加
5.サーバーマネージャーのIISマネージャーを開いて、サーバーを右クリックしてFTPサイトを追加
6.任意のFTPサイト名を付与、上記で指定した公開先フォルダを追加
7.バインドのIPアドレスは「すべて未割り当て」、SSLはなし
8.認証は「基本」、承認は「指定された役割またはユーザーグループ、グループ名は上記で指定したグループ、アクセス許可は読み取りと書き込みいずれもチェック
9.FTPファイアウォールのサポートを開いて、パッシブポートを6000-6100で指定する。(別でも良い)
10.FWで上記Passiveポートを受信側で開放する
AD参加している場合のユーザー追加手順は下記
- サーバーマネージャー
- ツール
- ActiveDirectoryユーザーとコンピューター
- 対象ドメインのUsers
- 新規作成→グループ→ftpusers(スコープはグローバル、グループの種類はセキュリティ)
- 新規作成→ユーザー→フルネームとログオン名を指定
- 「ユーザーはパスワードを変更できない」「パスワードを無期限」にチェック
- ftpusersグループに上記ユーザーを追加
Apacheの起動失敗ログ
イベントビューアー→Windowsログ→Application