Nginx

2012-12-03 30 views
61

के साथ एक सर्वर से दो साइटों की सेवा करना मेरे पास एक रेल ऐप है और मेरे सर्वर पर चल रहा है और अब मैं एक और जोड़ना चाहता हूं।Nginx

मैं Nginx क्या अनुरोध के लिए है और डोमेन नाम के आधार पर विभाजित यातायात

दोनों साइटों को अपने स्वयं के nginx.conf साइटों सक्षम में सांकेतिक रूप से लिंक है जाँच करना चाहते हैं, लेकिन मैं nginx शुरू करने में त्रुटि मिली Starting nginx: nginx: [emerg] duplicate listen options for 0.0.0.0:80 in /etc/nginx/sites-enabled/bubbles:6

वे दोनों 80 पर सुन रहे हैं लेकिन विभिन्न चीजों के लिए।

साइट # 1

upstream blog_unicorn { 
    server unix:/tmp/unicorn.blog.sock fail_timeout=0; 
} 

server { 
    listen 80 default deferred; 
    server_name walrus.com www.walrus.com; 
    root /home/deployer/apps/blog/current/public; 

    location ^~ /assets/ { 
    gzip_static on; 
    expires max; 
    add_header Cache-Control public; 
    } 

    try_files $uri/index.html $uri @blog_unicorn; 
    location @blog_unicorn { 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header Host $http_host; 
    proxy_redirect off; 
    proxy_pass http://blog_unicorn; 
    } 

    error_page 500 502 503 504 /500.html; 
    client_max_body_size 4G; 
    keepalive_timeout 10; 
} 

साइट दो:

upstream bubbles_unicorn { 
    server unix:/tmp/unicorn.bubbles.sock fail_timeout=0; 
} 

server { 
    listen 80 default deferred; 
    server_name bubbles.com www.bubbles.com; 
    root /home/deployer/apps/bubbles/current/public; 

    location ^~ /assets/ { 
    gzip_static on; 
    expires max; 
    add_header Cache-Control public; 
    } 

    try_files $uri/index.html $uri @bubbles_unicorn; 
    location @bubbles_unicorn { 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header Host $http_host; 
    proxy_redirect off; 
    proxy_pass http://bubbles_unicorn; 
    } 

    error_page 500 502 503 504 /500.html; 
    client_max_body_size 4G; 
    keepalive_timeout 10; 
} 
+1

FYI करें, कॉन्फ़िगर किया गया था वाक्यविन्यास 'डिफ़ॉल्ट' 0.8.21 http://nginx.org/en/docs/http/request_processing में 'default_server' में बदल गया।एचटीएमएल – spuder

+0

@ स्पूडर धन्यवाद, यह अचानक मेरे 'डिफ़ॉल्ट_सर्वर "पैरामीटर को डिफ़ॉल्ट" सुनवाई "निर्देश के लिए निर्दिष्ट किया जा सकता है केवल' त्रुटि – user3132194

उत्तर

100

The documentation says:

default_server पैरामीटर, यदि मौजूद है, सर्वर निर्दिष्ट के लिए डिफ़ॉल्ट सर्वर बनने के लिए कारण होगा पता: पोर्ट जोड़ी।

यह भी स्पष्ट है, वहाँ केवल एक ही डिफ़ॉल्ट सर्वर हो सकता है।

और यह भी कहते हैं जाता है:

एक सुनने के निर्देश सॉकेट से संबंधित सिस्टम कॉल से संबंधित कई अतिरिक्त पैरामीटर हो सकता है। उन्हें किसी भी सुने निर्देश में निर्दिष्ट किया जा सकता है, लेकिन दिए गए पते के लिए केवल एक बार: पोर्ट जोड़ी।

तो, आप listen 80 निर्देशों में से एक से default और deferred निकाल देना चाहिए। और यह भी ipv6only=on निर्देश पर भी लागू होता है।

+0

ठीक है मैंने ऐसा किया और nginx शुरू करने में त्रुटि जांच को पीछे छोड़ दिया। साइट 2 अपेक्षित के रूप में काम करता है, साइट 1 nginx से 400 का रिटर्न देता है। कोई सुझाव? – Chris

+0

त्रुटि लॉग में क्या है? – VBart

+0

इस जैसा ही है: http://stackoverflow.com/questions/7334193/nginx-reverse-proxy-many-html-status-code-400-responses- क्यों कोई त्रुटि नहीं है लेकिन "-" 400 0 "-" " - "एक्सेस लॉग – Chris

6

बस इसी समस्या को दबाएं, लेकिन डुप्लिकेट default_server निर्देश यह संदेश केवल एकमात्र कारण नहीं था।

आप server_name निर्देशों में से एक पर केवल backlog पैरामीटर का उपयोग कर सकते हैं।

उदाहरण

साइट 1:

server { 
    listen 80 default_server backlog=2048; 
    server_name www.example.com; 
    location/{ 
     proxy_pass http://www_server; 
    } 

साइट 2:

server { 
    listen 80; ## NOT NOT DUPLICATE THESE SETTINGS 'default_server backlog=2048;' 
    server_name blogs.example.com; 
    location/{ 
     proxy_pass http://blog_server; 
    } 
0

मैं एक ही मुद्दा रहा था। मैंने इसे /etc/nginx/sites-available/example2.com फ़ाइल को संशोधित करके ठीक किया है। मैं

server { 
     listen 443 ssl; # modified: was listen 80; 
     listen [::]:443; #modified: was listen [::]:80; 
     . . . 
} 

करने और /etc/nginx/sites-available/example1.com में सर्वर ब्लॉक बदल मैं बाहर listen 80 और listen [::]:80 टिप्पणी की है क्योंकि सर्वर ब्लॉक पहले से ही के लिए 443

+0

यह वास्तव में प्रश्न का उत्तर नहीं देता है। यदि आपके पास कोई अलग प्रश्न है, तो आप पूछ सकते हैं इसे [प्रश्न पूछें] पर क्लिक करके (https://stackoverflow.com/questions/ask)। आप अधिक ध्यान आकर्षित करने के लिए [एक बक्षीस] (https://stackoverflow.com/help/privileges/set-bounties) भी जोड़ सकते हैं इस questi के लिए एक बार आपके पास पर्याप्त [प्रतिष्ठा] है (https://stackoverflow.com/help/whats-reputation)। - [समीक्षा से] (/ समीक्षा/कम गुणवत्ता वाले पदों/18 9 0 9 255) –