Start typing to search across invoices, services, domains, tickets, and more...
サイトクラスター(マルチIP)サーバーでは、管理や証明書の設定、リスク分離のために各Webサイトをそれぞれ別のIPで公開したいというニーズがよくあります。本記事ではマルチIPサーバーでサイトごとに専用IPを割り当てる方法として、Nginxの listen IP:80/443 によるバインド、宝塔パネル(aaPanel)での設定、送信元IPとSNATの概要、そして複数サイト運用時のSEOの注意点を解説します。Debian/Ubuntu、CentOS/Rocky/AlmaLinux上のNginxが対象です。
Nginxはシステムに存在するアドレスでしか待ち受けできず、存在しない場合は cannot assign requested address エラーになります。
ip -4 addr show dev eth0 | grep inet各サイトの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にバインドされたサイトだけに振り分けられます。
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非対応のクライアントでも正しい証明書が返されます。
未知のドメインを拒否する default_server をIPごとに追加すると、他人がドメインをあなたのIPに向けてミラーサイトを作るのを防げます。
server {
listen 203.0.113.11:80 default_server;
server_name _;
return 444;
}nginx -t && systemctl reload nginx
ss -lntp | grep nginxDNS反映前でも 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/宝塔パネルで作成したサイトは、標準で全IPの80番ポートを待ち受けます。専用IPにバインドするには、パネルで該当サイトの設定を開き、設定ファイルの listen 行を特定IPに書き換えて保存します。
listen 203.0.113.11:80;
listen 203.0.113.11:443 ssl;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.meiptablesのルールは iptables-save や netfilter-persistent で保存しないと再起動後に消えます。
多くはIPがNICにバインドされていないか、別のプロセスがポートを使用しています。ip addr と ss -lntp で確認してください。
listen 80 default_server のままのserverブロックが残っていないか、DNSが古いIPを向いていないか確認してください。
はい。<VirtualHost 203.0.113.11:80> とListenディレクティブを組み合わせて設定します。
解決しない場合はチケットを送信して、IMIDCの24時間365日テクニカルサポートへご連絡ください。