web-dev-qa-db-ja.com

nginxでdefault_serverおよびパブリックIPを処理するためのベストプラクティス

私は最近、debian 8でnginxサーバーを作成しました。これには、/ etc/nginx/sites-available/defaultにnginxウェルカムページにリダイレクトするデフォルト設定が用意されています。

server {
listen 80 default_server;
listen [::]:80 default_server;

root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;

server_name your_server_ip;

location / {
    try_files $uri $uri/ =404;
}

location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
}

location ~ /\.ht {
    deny all;
}
}

新しい制作ページを追加しました。たとえば、sslが付いた「example.com」です。

../example.comの設定では、デフォルトのサーバーとして設定されていません。

server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
}

server {

# SSL configuration

listen 443 ssl;
listen [::]:443 ssl;
include snippets/ssl-example.com.conf;
include snippets/ssl-params.conf;
....

これで、sslセキュリティが https://www.ssllabs.com/ssltest/analyze.html?d=example.com でテストしたところ、A +が得られました。しかし、「一貫性のないサーバー構成」についてコメントしていました。

そして、私がIPアドレスをロードすると、ブラウザでx.x.x.xをhttps:// x.x.x.xと言います https://example.com と同じページをロードしますが、ssl(緑のアドレスバー)なしです。 http:// x.x.x.xをロードすると、デフォルトのnginxウェルカムページがロードされます。

禁止されたメッセージを取得するようにデフォルト設定(IP用)を設定しようとしました。次のコードを追加しました

location / {
deny all;
}

今、example.comのsslセキュリティテストを実行すると、「サポートされている安全なプロトコルはありません」と表示され、テスト結果が表示されません。

だから私の質問は、

IPアドレス用にロードするnginxに付属するデフォルトの構成で何をすべきですか?

「listen」コマンドでdefault_serverとして設定する必要があるserver_name(構成ファイル)?

現在https要求をサンプルドメインに転送しているIPで何をすべきですか?

意図した結果:-

https:// example.comはサーバーへの接続にのみ使用する必要があります。example.comはサーバー上のphpスクリプトで使用されるため、IPアドレスをロードすると「ページが見つかりません」または「禁止」と表示されます。

SSLテストでは、設定後、少なくともAの評価が必要です。

iPアドレスは接続を直接受け入れて処理するべきではありません。

1
Ajay Singh

これをデフォルトのサーバーブロックとして使用できます。

server {
    listen 80 default_server;
    listen 443 ssl default_server;

    server_name _;

    ... SSL keys for default server ...

    return 403;
}

これにより、Host:ヘッダーがサーバー上の他のどの仮想ホストとも一致しないHTTP接続は、403 Forbiddenエラーメッセージをクライアントに返します。

ここで、既存のホスト名と一致しないホスト名に有効なSSLキーを使用すると、クライアントは直接403エラーページを受け取ります。ここで自己署名証明書を使用すると、ユーザーは信頼できない証明書のエラーメッセージを受け取ります。

4
Tero Kilkanen

やっと使える解決策が見つかりました。 Quoraはこのようなことをします。デフォルトを404にリダイレクトします。

ソース: httpsの「デフォルト」nginxサーバーを適切に設定

デフォルト設定をこれに設定する。

server {
server_name _;
listen       80  default_server;
return       404;
}


server {
listen 443 ssl;
server_name _;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
return       404;
}

次に、存在しない場合はsslのディレクトリを作成します

Sudo mkdir -p /etc/nginx/ssl

次に、同じ用に自己署名したsslを作成します

Sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt

エラーを確認し、nginxをリロードして404を取得します

nginx -t

Sudo sytemctl reload nginx
1
Ajay Singh