ESC

Start typing to search across invoices, services, domains, tickets, and more...

Search... Ctrl+K
サイト群・マルチIP

マルチIPサーバーでサイトごとに専用IPを割り当てる方法:Nginx・宝塔パネル・送信元IP

8 ステップ 7 分で読めます 4 回閲覧 0
目次

サイトクラスター(マルチIP)サーバーでは、管理や証明書の設定、リスク分離のために各Webサイトをそれぞれ別のIPで公開したいというニーズがよくあります。本記事ではマルチIPサーバーでサイトごとに専用IPを割り当てる方法として、Nginxの listen IP:80/443 によるバインド、宝塔パネル(aaPanel)での設定、送信元IPとSNATの概要、そして複数サイト運用時のSEOの注意点を解説します。Debian/Ubuntu、CentOS/Rocky/AlmaLinux上のNginxが対象です。

作業前にIPブロックをNICへバインドし(本ヘルプセンターの「Linuxで/24のIPを一括バインド」を参照)、各ドメインのAレコードをそれぞれのIPへ向けてください。以下では 203.0.113.11、203.0.113.12 とドメイン site1.example、site2.example を例にします。

ステップ1:IPがインターフェースにバインドされているか確認

Nginxはシステムに存在するアドレスでしか待ち受けできず、存在しない場合は cannot assign requested address エラーになります。

ip -4 addr show dev eth0 | grep inet

ステップ2:Nginxのlisten IP:80でサイトごとに専用IPをバインド

各サイトのserverブロックで listen 80; を listen IP:80; に変更します。設定ファイルは通常 /etc/nginx/conf.d/ または /etc/nginx/sites-available/ にあります。

server {
    listen 203.0.113.11:80;
    server_name site1.example www.site1.example;
    root /var/www/site1;
    index index.html index.php;
}

server {
    listen 203.0.113.12:80;
    server_name site2.example www.site2.example;
    root /var/www/site2;
    index index.html index.php;
}

これにより、Hostヘッダーが一致しない場合でも、各IPへのアクセスはそのIPにバインドされたサイトだけに振り分けられます。

ステップ3:HTTPSサイトはlisten IP:443 sslを使う

443番ポートも同様に専用IPを指定し、サイトごとに証明書を設定します。

server {
    listen 203.0.113.11:443 ssl;
    server_name site1.example www.site1.example;
    ssl_certificate     /etc/nginx/ssl/site1.example/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/site1.example/privkey.pem;
    root /var/www/site1;
}

1つのIPに1つのHTTPSサイトであれば、SNI非対応のクライアントでも正しい証明書が返されます。

ステップ4:IPごとにデフォルトサーバーを設定し不正な名前解決を防ぐ

未知のドメインを拒否する default_server をIPごとに追加すると、他人がドメインをあなたのIPに向けてミラーサイトを作るのを防げます。

server {
    listen 203.0.113.11:80 default_server;
    server_name _;
    return 444;
}

ステップ5:設定を確認してNginxをリロードし、各サイトのIPを検証

nginx -t && systemctl reload nginx
ss -lntp | grep nginx

DNS反映前でも curl --resolve でIPを指定してテストできます。

curl -I --resolve site1.example:80:203.0.113.11 http://site1.example/
curl -I --resolve site2.example:80:203.0.113.12 http://site2.example/

ステップ6:宝塔パネル(aaPanel)で複数IPサイトを設定

宝塔パネルで作成したサイトは、標準で全IPの80番ポートを待ち受けます。専用IPにバインドするには、パネルで該当サイトの設定を開き、設定ファイルの listen 行を特定IPに書き換えて保存します。

listen 203.0.113.11:80;
listen 203.0.113.11:443 ssl;
パネルでSSLやリライト、ポート設定を変更するとlisten行が再生成されることがあります。変更後は設定ファイルを再確認してください。メニュー名はパネルのバージョンにより異なります。

ステップ7:送信元IPとSNATの概要

Nginxのlistenが決めるのは受信側のIPだけです。サーバーから外部へ通信する場合(スクレイピング、API呼び出し、メール送信など)は既定でメインIPが使われます。特定サイトの通信を指定IPから送るには、プログラム側で送信元をバインドする(curlの--interface、PHP cURLのCURLOPT_INTERFACE)か、サイトを専用ユーザーで実行してiptablesでユーザー単位のSNATを設定します。

useradd -r -s /sbin/nologin site1run
iptables -t nat -A POSTROUTING -o eth0 -m owner --uid-owner site1run -j SNAT --to-source 203.0.113.11
curl --interface 203.0.113.11 https://ifconfig.me

iptablesのルールは iptables-save や netfilter-persistent で保存しないと再起動後に消えます。

マルチIPサイト運用のSEOアドバイス

  • 専用IPはあくまで前提条件で、検索順位にはオリジナルコンテンツやサイト品質、ユーザー体験の方がはるかに重要です
  • サイト間で同じテンプレート、同じ内容、同じアクセス解析IDの使い回しを避けましょう
  • 必要に応じてIPにrDNSを設定し、サイトごとに証明書を用意します
  • 検索エンジンのウェブマスター向けガイドラインを守り、スパムリンクやコピーサイトには使わないでください

よくある質問

Nginxで bind() to 203.0.113.11:80 failed と表示されます。

多くはIPがNICにバインドされていないか、別のプロセスがポートを使用しています。ip addr と ss -lntp で確認してください。

IPにアクセスすると別のサイトが表示されます。

listen 80 default_server のままのserverブロックが残っていないか、DNSが古いIPを向いていないか確認してください。

Apacheでも同じことはできますか?

はい。<VirtualHost 203.0.113.11:80> とListenディレクティブを組み合わせて設定します。

解決しない場合はチケットを送信して、IMIDCの24時間365日テクニカルサポートへご連絡ください。

この回答はお役に立ちましたか?

関連チュートリアル