2009-06-18 23 views
34

मैंने अपने मुख्य वेब सर्वर के रूप में Nginx सेट अप किया है और इसके पीछे दो मोचीवेब आधारित सर्वर हैं। कुछ अनुरोध इन दो सर्वरों के विपरीत हैं। अब, मैं nginx का उपयोग कर phpmyadmin (/ var/www/nginx-default/phpMyAdmin पर स्थित) तक पहुंच बनाना चाहता हूं, लेकिन यह कहता है कि त्रुटि 404 नहीं मिली है। क्या में यहां कुछ भूल रहा हूँ?Nginx स्थान निर्देश काम नहीं कर रहा प्रतीत होता है। क्या मैं कुछ भूल रहा हूँ?

server { 
    ############### General Settings #################### 
    listen 80; 
    server_name localhost; 
    access_log /home/me/dev/wwwaccess.log; 

    ############## Document Root #######################  
    location/{ 
     root /home/me/dev; 
     index index.html index.htm index.php; 
    } 

    ############## PHPMyAdmin ####################### 
    location /phpmyadmin { 
     root /var/www/nginx-default/phpMyAdmin; 
     index index.html index.htm index.php; 
    } 

    ############## Proxy Settings for FastCGI Server ##### 
    location ~ \.php$ { 
     fastcgi_pass 127.0.0.1:9000; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME /home/me/dev$fastcgi_script_name; 
     include /etc/nginx/fastcgi_params; 
    } 


    ############# Proxy Settings for Mochi1 ############### 
    location /mochi1 { 
      proxy_pass   http://127.0.0.1:8000; 
      proxy_redirect  off; 

      proxy_set_header Host    $host; 
      proxy_set_header X-Real-IP  $remote_addr; 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 

      client_max_body_size  10m; 
      client_body_buffer_size 128k; 

      proxy_connect_timeout  90; 
      proxy_send_timeout   90; 
      proxy_read_timeout   3600; 

      proxy_buffering off; 
     } 

    ############# Proxy Settings for Mochi2 ############### 
    location /mochi2 { 
      proxy_pass   http://127.0.0.1:8001; 
      proxy_redirect  off; 

      proxy_set_header Host    $host; 
      proxy_set_header X-Real-IP  $remote_addr; 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 

      client_max_body_size  10m; 
      client_body_buffer_size 128k; 

      proxy_connect_timeout  90; 
      proxy_send_timeout   90; 
      proxy_read_timeout   3600; 

      proxy_buffering off; 
     } 

    ############# Error redirection pages ################ 
    error_page 500 502 503 504 /50x.html; 
    location = /50x.html { 
     root /home/me/dev; 
    } 
} 

उत्तर

77

समस्या यहां है कि केवल "सर्वश्रेष्ठ" location निर्देश दिया जाता है इस क्रम में, यह है:

location = <path> (longest match wins) 
location ^~ <path> (longest match wins) 
location ~ <path> (first defined match wins) 
location <path> (longest match wins) 

इस नियम का उपयोग करके, आपके /phpmyadminlocation निर्देश नियमित अभिव्यक्ति ".php$"द्वारा पीटा जाता हैनिर्देश, इसलिए पूर्व को पूरी तरह नजरअंदाज कर दिया जाता है। इसके अतिरिक्त, आपका php fastcgi निर्देश आपके /home/me/dev निर्देशिका में हार्ड-वायर्ड है, जिसका अर्थ है कि phpMyAdmin पूरी तरह से पहुंच योग्य नहीं है। आप अपने phpMyAdmin लिपियों के लिए सही जड़ पाने के लिए एक फिर से लिखने का उपयोग कर सकते हैं:

location ~ \.php$ { 
    set $php_root /home/me/dev; 
    if ($request_uri ~* /phpmyadmin) { 
     set $php_root /var/www/nginx-default/phpMyAdmin; 
    } 

    fastcgi_pass 127.0.0.1:9000; 
    fastcgi_index index.php; 
    fastcgi_param SCRIPT_FILENAME $php_root$fastcgi_script_name; 
    include /etc/nginx/fastcgi_params; 
} 
+5

उत्तर के लिए धन्यवाद! मैंने इसे लंबे समय से आजमाया लेकिन यह फिर कभी काम नहीं किया। मुझे हमेशा HTTP 404 त्रुटियां मिलीं। केवल अब मुझे समस्या का पता चला। मेरे पास phpmyadmin फ़ाइलें/var/www/nginx-default/phpmyadmin के अंतर्गत थीं। जब nginx php फ़ाइल के लिए निर्देश को संसाधित करता है, तो यह अनुरोध से एक/ph /my/www/nginx-default/phpmyadmin/phpmyadmin दूसरे phpmyadmin के अंदर खोज करता है। यह रूट निर्देशिका से है, यह सापेक्ष निर्देशिका की खोज करता है जो फिर phpmyadmin है। इसलिए मुझे phpmyadmin के अंदर एक और निर्देशिका बनाना पड़ा और वहां सभी फाइलें रखीं। अब यह काम कर रहा है! – ErJab

+3

+1 मैंने अपने nginx.conf के साथ समस्या को हल करने के लिए पिछले 2 घंटों को जला दिया और आखिरकार यहां समाप्त हो गया ... मैं nginx के लिए नया हूं और चीजों को ठीक करने के लिए यह बहुत निराशाजनक है ... – dlamotte

+0

ग्रेट जवाब। मुझे एहसास नहीं हुआ कि Nginx हमेशा एक ही स्थान चुनता है, भले ही एक से अधिक मैचों। मुझे यह मानना ​​है कि यह दस्तावेज़ीकरण में स्पष्ट रूप से बताया गया था। –

0

शायद यह index.html की खोज करता है? नीचे

location /phpmyadmin { 
    root /var/www/nginx-default/phpMyAdmin; 
    index index.php; 
} 

को बदलने का प्रयास करें और खंड जोड़ने के लिए, मामले से संबंधित मुद्दों

से बचने के लिए
location /phpMyAdmin { 
    rewrite ^/* /phpmyadmin last; 
} 
6

'जड़' सीधे सेट करें। कम निर्देश, कम वार्स सेट करने के लिए कम कंप्यूटिंग की आवश्यकता है। अन्य चीजें भी हैं (जैसे fastcgi_param DOCUMENT_ROOT) जो वर्तमान में स्वीकृत उत्तर में सही ढंग से सेट नहीं की जाएंगी। इस विधि कि सभी लेकिन संभाल लेंगे:

location ~ \.php$ { 
    if ($request_uri ~* /phpmyadmin) { 
     root /var/www/nginx-default/phpMyAdmin; 
    } 

    fastcgi_pass 127.0.0.1:9000; 
    fastcgi_index index.php; 
    include /etc/nginx/fastcgi_params; 
} 
+1

यदि '/ phpmyadmin' यूआरआई का हिस्सा है (' http: // होस्ट: पोर्ट/phpmyadmin/... '), रूट को'/var/www/nginx-default/'पर सेट किया जाना चाहिए, जब तक phpmyadmin स्थापित नहीं किया जाता '/ var/www/nginx-default/phpMyAdmin/phpmyadmin' तक। – Sithsu

+0

इस उत्तर ने मुझे बहुत मदद की, बहुत बहुत धन्यवाद) मुझे यह उल्लेख करना चाहिए कि ';' होना चाहिए इस पंक्ति के अंत में: रूट/var/www/nginx-default/phpMyAdmin –

2

मैं अब घंटे के लिए इस के साथ संघर्ष किया और मेरे मामले के लिए काम किया ऊपर चर्चा से कोई भी समाधान (के बाद से मैं index.php को चलाने के लिए, तर्क के साथ index.php की जरूरत है, और index.php की तुलना में अन्य php स्क्रिप्ट), लेकिन आखिर में निम्नलिखित कॉन्फ़िगरेशन कॉन्फ़िगरेशन तक पहुंच गए:

location /php-app { 
    passenger_enabled off; 
    alias /path/to/php-app/$1; 
    index index.php index.html; 
    try_files $uri $uri/ @rewrite; 
    } 

    location @rewrite { 
    rewrite ^/php-app(.*)$ /index.php?q=$1 last; 
    } 

location ~ \.php$ { 
    alias /path/to/php-app/$1; 
    rewrite ^/php-app(.*)$ $1 last; 
    passenger_enabled off; 
    fastcgi_pass unix:/tmp/php-fpm.socket; 
    fastcgi_index index.php; 
    include /etc/nginx/fastcgi_params; 
    fastcgi_param SCRIPT_FILENAME /path/to/php-app$fastcgi_script_name; 
    fastcgi_intercept_errors on; 
    } 
संबंधित मुद्दे