Nginx किसी भी डोमेन नाम का जवाब क्यों दे रहा है?


Answers

आपके पास कैच-ऑल के लिए एक डिफ़ॉल्ट सर्वर होना चाहिए, आप 404 या बेहतर प्रतिक्रिया देने के लिए बेहतर कर सकते हैं (कुछ बैंडविड्थ बचाएंगे) 444 लौटकर जो nginx विशिष्ट HTTP प्रतिक्रिया है जो कनेक्शन को बंद कर देता है और कुछ भी नहीं लौटाता

server {
    listen       80  default_server;
    server_name  _; # some invalid name that won't match anything
    return       444;
}
Question

मेरे पास nginx है और रूबी / सिनात्रा ऐप के साथ चल रहा है और सब ठीक है। हालांकि, अब मैं एक ही सर्वर से दूसरे एप्लिकेशन को चलाने की कोशिश कर रहा हूं और मैंने कुछ अजीब देखा है। सबसे पहले, यहाँ मेरा nginx.conf है:

pid /tmp/nginx.pid;
error_log /tmp/nginx.error.log;

events {
  worker_connections 1024;
  accept_mutex off;
}

http {
  default_type application/octet-stream;
  access_log /tmp/nginx.access.log combined;

  sendfile on;
  tcp_nopush on;
  tcp_nodelay off;

  gzip on;
  gzip_http_version 1.0;
  gzip_proxied any;
  gzip_min_length 500;
  gzip_disable "MSIE [1-6]\.";
  gzip_types text/plain text/xml text/css
             text/comma-separated-values
             text/javascript application/x-javascript
             application/atom+xml;

  upstream app {
    server unix:/var/www/app/tmp/sockets/unicorn.sock fail_timeout=0;
  }

  server {
    listen 80;
    client_max_body_size 4G;
    server_name FAKE.COM;

    keepalive_timeout 5;

    root /var/www/app/public;

    location / {
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_redirect off;

      if (!-f $request_filename) {
        proxy_pass http://app;
        break;
      }
    }

    error_page 500 502 503 504 /500.html;
    location = /500.html {
      root /var/www/app/public;
    }
  }
}
                                                          68,0-1        B

ध्यान दें कि कैसे server_name FAKE.COM सेट है, फिर भी सर्वर उन सभी होस्टों का जवाब दे रहा है जो उस सर्वर को अन्य डोमेन नामों के माध्यम से हिट करते हैं। मैं उस विशेष सर्वर को केवल FAKE.COM अनुरोधों का उत्तर कैसे दे सकता हूं?




अपने प्रश्न का उत्तर देने के लिए - यदि कोई मिलान नहीं है तो nginx पहले सर्वर को चुनता है। documentation देखें:

यदि इसका मान किसी भी सर्वर नाम से मेल नहीं खाता है, या अनुरोध में यह हेडर फ़ील्ड बिल्कुल नहीं है, तो nginx इस पोर्ट के लिए अनुरोध को डिफ़ॉल्ट सर्वर पर रूट करेगा। उपरोक्त विन्यास में, डिफ़ॉल्ट सर्वर पहला है ...

अब, यदि आप डिफॉल्ट कैच-ऑल सर्वर चाहते हैं, तो सभी अनुरोधों के लिए 404 के साथ जवाब दें, तो यहां यह कैसे करें:

server {
    listen 80 default_server;
    listen 443 ssl default_server;
    server_name _;
    ssl_certificate <path to cert>
    ssl_certificate_key <path to key>
    return 404;
}

ध्यान दें कि आपको प्रमाण पत्र / कुंजी निर्दिष्ट करना है (जिसे स्वयं हस्ताक्षरित किया जा सकता है), अन्यथा सभी SSL कनेक्शन विफल हो जाएंगे क्योंकि nginx इस डिफ़ॉल्ट_सेवर का उपयोग करके कनेक्शन स्वीकार करने का प्रयास करेगा और उसे प्रमाणपत्र / कुंजी नहीं मिलेगी।




डिफ़ॉल्ट सर्वर निर्दिष्ट करने के कुछ तरीके हैं।

पहला तरीका - सूची में पहले डिफ़ॉल्ट सर्वर निर्दिष्ट करें, यदि आप अपने सर्वर कॉन्फ़िगरेशन को एक कॉन्फ़िगरेशन फ़ाइल में रखते हैं, जैसे डेयो ऊपर दिखाया गया है।

दूसरा तरीका (बेहतर) अधिक लचीला - listen निर्देश के लिए default_server पैरामीटर प्रदान करें, उदाहरण के लिए:

server {
    listen  *:80 default_server;
    root /www/project/public/;
}

यहां अधिक जानकारी: Nginx डॉक्टर / सुनो

इस तरह से अधिक उपयोगी जब आप अलग-अलग फ़ाइलों में सर्वर कॉन्फ़िगरेशन रखते हैं और उन फ़ाइलों को वर्णानुक्रम में नामित नहीं करना चाहते हैं।




Links



Tags

nginx