SORU
22 Mart 2012, PERŞEMBE


Neden herhangi bir etki alanı adı için yanıt nginx mi?

Nginx ve Ruby/Sinatra bir uygulama ile çalışan var ve hepsi iyi. Ancak, şimdi ikinci bir uygulama aynı sunucudan çalıştırmak için çalışıyorum ve garip bir şey fark ettim. Öncelikle, burada benim 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 6 ** ayarlanır henüz sunucu diğer alan adları üzerinden sunucu isabet ait olduğu nasıl tepki dikkat edin. Nasıl belirli bir sunucu sadece FAKE.COM isteklerine cevap vermesini sağlayabilir miyim?

CEVAP
22 Mart 2012, PERŞEMBE


Nginx config ilk sunucu engellemek için belirli sunucu blok yok sunucu vuran tüm istekleri için varsayılan değer budur.

Yani senin config, varsayarak gerçek etki REAL.COM ne zaman bir kullanıcı türleri, olur gidermek için sunucu, ve o zamandan beri yok server engellemek için bu kurulum, sunucu engellemek için FAKE.COM varlık, ilk sunucu bloğu (sadece sunucu bloke durumda), işlem talep ediyorum.

Bu yüzden uygun yapılandırmaları belirli alanlar için başkalarıyla izlemeden önce varsayılan sunucu için belirli bir blok var.

# Default server
server {
    return 404;
}

server {
    server_name domain_1;
    [...]
}

server {
    server_name domain_2;
    [...]
}

vb

* * * * . DÜZENLE

Bazı kullanıcılar biraz bu örnek karıştı ve tek bir dosya conf dosyasını etc sınırlı olduğunu düşünüyor gibi görünüyor.

Lütfen yukarıdaki OP gerektiği gibi geliştirmek için basit bir örnek olduğunu unutmayın.

Ben şahsen bu kadar (CentOS/RHEL) ile ayrı bir konak conf dosyaları kullanın:

http {
    [...]
    # Default server
    server {
        return 404;
    }
    # Other servers
    include /etc/nginx/conf.d/*.conf;
}

/etc/nginx/conf.d/ domain_1 içerir., domain_2 conf.... domain_n.conf ana nginx sunucu blok sonra eklenecek olan conf.her zaman ilk olacak ve her zaman sürece varsayılan olacak conf dosyasını default_server Direktifi başka bir yerde ile geçersiz kılındı.

Diğer sunucular için conf dosyalarının dosya adlarının alfabetik sırasını bu durumda önemsiz hale gelir.

Buna ek olarak, bu düzenleme, birden çok varsayılan tanımlamak mümkündür bu esneklik çok verir.

Benim özel durumda, Apache için iç arabirimi yalnızca bağlantı Noktası 8080 ve ben proxy PHP ve Perl komut dinleyen var.

Ancak, çalışma iki ayrı uygulamalar hem dönüş links ":8080" html çıktısına bağlı olarak algılayan Apache değil çalışan standart Port 80 ve denemek için "yardım".

Bu Apache dış arabirimden ulaştı ve bağlantıları, bağlantı Noktası 80'de nokta gerektiği gibi bu linkler geçersiz hale bir soruna neden olur.

Ben böyle istekleri yeniden yönlendirmek için Port 8080 için varsayılan bir sunucu oluşturarak bu sorunu çözmek.

http {
    [...]
    # Default server block for undefined domains
    server {
        listen 80;
        return 404;
    }
    # Default server block to redirect Port 8080 for all domains
    server {
        listen my.external.ip.addr:8080;
        return 301 http://$host$request_uri;
    }
    # Other servers
    include /etc/nginx/conf.d/*.conf;
}

Normal server blokları hiçbir bağlantı Noktasını dinler gibi 8080, yönlendirme varsayılan sunucu blok şeffaf nginx konumu sayesinde bu isteklerini işler.conf.

Ben aslında böyle bir server blokları dört var ve bu basitleştirilmiş kullanım durumda.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AutoklubZAPRESIC

    AutoklubZAPR

    17 Mayıs 2011
  • BetterCoder

    BetterCoder

    17 Aralık 2012
  • ghosti66

    ghosti66

    27 AĞUSTOS 2006