何らかの理由で、server_name
ディレクティブでベアIPアドレスを設定すると、NGINXが機能しません。
server {
listen 80;
server_name xx.xx.xxx.xx; # doesn't work
server {
listen 80;
server_name ec2-xx-xx-xxx-xx.ap-southeast-2.compute.amazonaws.com; # this works fine
NGINXがIPアドレスを受け入れないのはなぜですか? IPを受け入れるように強制する方法は?
私はドメイン名レジストラー(正確にはnamecheap)でダイナミックDNSを使用しており、パブリックドメイン名をAWS EC2インスタンスにマップする「A」レコードがあります。
example.com
に移動すると、EC2インスタンスアプリにリダイレクトされます。しかし、アプリのランディングページではなく、デフォルトのNGINXランディングページが表示されます。 NGINXはリクエストをNode.jsにプロキシしません。
IPアドレスの代わりに「example.com」を使用してみましたか?
少なくともApacheでは、server_nameフィールドの目的は、単一のIPアドレスから複数のWebサイト(名前空間)を提供できるようにすることです。 「 http://example.com 」に続くクライアントは、DNSルックアップを実行し、DNSルックアップから取得したIPアドレスにリクエストを送信しますが、リクエストに「example.com」を含めますこれにより、Webサーバー(NGINX)は、リクエストがどのWebサイトに属するかを判別できます。
構成されているサイトが1つしかない場合は、nginx configでこれを使用してみてください。
server_name _ ;
がserver
ヘッダーの内容に関係なく、Host
がすべてのHTTPリクエストを受け入れるように強制します。
この質問は、server_name宣言の目的の誤解を示しています。サーバー間では、リスニングソケットを作成するインターフェイスのIPアドレスを指定できるのが一般的です。ただし、NGINXでは、server_nameディレクティブを使用してこれを実現することはできません。
Server_nameディレクティブを理解するには、HTTPプロトコルの一部を理解する必要があります。 WebブラウザーがWebサイトにHTTPリクエストを送信すると、たとえば、スタックオーバーフロー https://serverfault.com/questions がトリガーされ、DNSでserverfault.comを検索してIPアドレスを取得します-これがDNSエントリが必要な理由です。
WebブラウザーがIPアドレスを取得すると、そのIPアドレスのポート80へのTCP接続が開きます。Webブラウザーは、要求されているページをWebサーバーに通知する必要があります。これは、 HTTPプロトコルを使用します。リクエストの最初の行は次のようになります。
GET/questions HTTP/1.1
これにより、サーバーにURLパスと、クライアントが通信に使用しているHTTPバージョンが通知されます。
2行目は次のとおりです。
ホスト:serverfault.com
これはHTTPヘッダーと呼ばれ、ホストヘッダーはどのWebサイトが要求を処理する必要があるかをWebサーバーに伝えます。サーバーが単一のWebサイトのみをホストしている場合、これはおそらくやり過ぎだと感じます。しかし、多くの場合、Webサーバーは多くのWebサイトを処理します。
これは、nginxディレクティブserver_nameまで一致します。このディレクティブは、Hostヘッダーがこの文字列と一致する場合にのみこのnginxサイトを使用するようnginxに指示します。
したがって、質問に答えるために、server_nameディレクティブにIPアドレスを設定することは意味がありません。ドメイン名を登録してから、AWSサーバーのDNS名を参照するCNAME DNSエントリを作成するのが一般的です。代替サーバーを起動するときは、新しいサーバーのDNS名を指すようにCNAMEを更新します。
プロのウェブサイトはエラスティックロードバランサーの背後に配置され、DNSエントリで参照できるように一定のDNS名を維持します。
NGINXは初めてですが、公式ドキュメント( https://nginx.org/en/docs/http/server_names.html )によると、IS許可されています数値のIPアドレスを使用するには:
「誰かがサーバー名ではなくIPアドレスを使用してリクエストを行う場合、「ホスト」リクエストヘッダーフィールドにはIPアドレスが含まれ、リクエストはサーバー名としてIPアドレスを使用して処理できます。
server {
listen 80;
server_name example.org
www.example.org
""
192.168.1.1
;
...
}
あなたがあなたのIPアドレスのDNSレコードを管理しているなら、これを行うのは理にかなっています