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 でアクセス
image

環境変数PATHを追加

検索で、環境変数を検索して、環境変数PATHへ新規で下記を追加する。

C:\Apache24\bin

自動起動設定

  • 管理者でコマンドプロンプトを起動
  • バイナリまでCDして(Pathを通していればそのままでOK)、 httpd.exe -k install を実行すればサービスへ追加される
    image

もしも、「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 へコピーする。

image

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(); ?--> が表示されることを確認。
image

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
&lt;/Directory&gt;

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.inisql-mode からNO_ZERO_IN_DATE と NO_ZERO_DATE を削除する
  • [mysqld]でcharacter-set-server=utf8を追加
  • [mysql]でdefault-character-set=utf8を追加

メール

サーバーマネージャーを起動

image

役割と機能を追加

image

役割ベースまたは機能ベースのインストール
image

対象サーバーの選択
image

サーバーの役割
ここではそのまま進む
image

機能でSMTPサーバーを選択
image

Webサーバーの役割
image

役割サービス
Webサーバーにチェックがある状態(SMTPサーバーはここで選択されている)
image

確認画面
image

インストールには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 マネージャー
image

SMTP Virtual Server のプロパティを開く
image

アクセス→中継
image

中継サーバーに自分のIPアドレスを追加
image

127.0.0.1が許可になっていることを確認
image

配信→送信セキュリティ
image

匿名アクセスが選択されていることを確認してOK
image

SMTPサーバーを再起動
停止→開始
image

自動起動設定

inetinfo.exe -k install

動作確認

サーバーマネージャーからtelnetクライアントをインストール
image

コマンドプロンプトで送信テスト
103163052-fb38b500-483b-11eb-8375-3e677630a702


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参加している場合のユーザー追加手順は下記

  1. サーバーマネージャー
  2. ツール
  3. ActiveDirectoryユーザーとコンピューター
  4. 対象ドメインのUsers
  5. 新規作成→グループ→ftpusers(スコープはグローバル、グループの種類はセキュリティ)
  6. 新規作成→ユーザー→フルネームとログオン名を指定
  7. 「ユーザーはパスワードを変更できない」「パスワードを無期限」にチェック
  8. ftpusersグループに上記ユーザーを追加

Apacheの起動失敗ログ

イベントビューアー→Windowsログ→Application