2012-12-22 10 views
11

Mam konkretny schemat URI, który sprawia mi kłopoty. I trzeba uruchomić nodejs służyć następujące:nginx + nodejs + php

domain.com 
var.domain.com 
var.domain.com/foo/ 

mam to działa bez problemu przy użyciu express.vhost() aby służyć do subdomen. Jednak muszę służyć zawartości statycznej i php raz URI podobny do następującego:

var.domain.com/foo/bar 
var.domain.com/foo/bar/index.php 

Tutaj /bar/ jest jakiś katalog na moim serwerze. Wszystko z tego adresu URL (na przykład /bar/images/favicon.ico) będzie wyglądało jak twój typowy schemat katalogów. Zwykle robiłbym typowy proxy_pass do węzła działającego na jakimś porcie, ale jak widzisz, potrzebuję nodejs, aby był podstawowym handler'em na porcie 80, i mam to przekazywać żądanie off do nginx działającego na jakimś innym porcie (lub być może/prostsze na odwrót?).

Czy ten schemat jest możliwy z konfiguracją (nginx/php)/nodejs?

+0

To ma sens teraz, próbuję tego, kiedy wrócę do mojego komputera. Otrzymałem błąd 403, próbując uzyskać dostęp do tras ekspresowych. I myślę, że oświadczenie "break" wyjaśnia to wszystko. –

Odpowiedz

19

Nginx umożliwia bardzo elastyczne kierowanie żądań. pokażę ci sposób skonfigurować

  • domyślny przekazany do node.js backend
  • inna trasa przechodzi do php-fpm backend
  • alternatywna trasa przechodzi do typowej apache + mod_php backend
  • trasy masz js, obrazy, css i inne pliki na maszynie nginx? służyć im najszybszą drogę bezpośrednio z nginx

mi się podoba, i myślę, że to domyślny układ instalacyjny dla większości dystrybucji, aby mieć conf.d i vhosts.d katalogi z active i available folderach. Mogę więc łatwo wyłączyć vhost lub plik konfiguracyjny, po prostu usuwając dowiązanie symboliczne.

/etc 
    nginx.conf 
    vhosts.d/ 
      active 
      available 
    conf.d/ 
      active 
      available 

/etc/nginx.conf

# should be 1 per CPU core  
worker_processes  2;       

error_log    /var/log/nginx/error.log; 

# I have this off because in our case traffic is not monitored with nginx and I don't want disks to be flooded with google bot requests :) 
access_log    off; 
pid      /var/run/nginx.pid; 

events { 
     # max clients = worker_processes * worker_connections 
     worker_connections  1024; 
     # depends on your architecture, see http://wiki.nginx.org/EventsModule#use 
     use      epoll; 
} 

http { 

     client_max_body_size 15m; 

     include     mime.types; 
     default_type   text/html; 
     sendfile    on; 
     keepalive_timeout  15; 

     # enable gzip compression 
     gzip     on; 
     gzip_comp_level   6; 
     gzip_types    text/plain text/css text/xml application/x-javascript application/atom+xml application/rss+xml application/json; 
     gzip_http_version  1.0; 


     # Include conf.d files 
     include conf.d/active/*.conf; 

     # include vhost.d files 
     include vhosts.d/active/*.conf; 
} 

/etc/nginx/vhosts.d/available/default.conf

Say nasz główny dokument do plików statycznych jest /srv/www/vhosts/static/htdocs

server { 
    server_name _; 
    listen  80; 

    root  /srv/www/vhosts/static/htdocs; 

    # if a file does not exist in the specified root and nothing else is definded, we want to serve the request via node.js 
    try_files $uri @nodejs;   

    # may want to specify some additional configuration for static files 
    location ~ \.(js|css|png|gif|jpg) 
    { 
     expires 30d; 
    } 

    location @nodejs 
    { 
     # say node.js is listening on port 1234, same host   
     proxy_pass 127.0.0.1:1234; 
     break; 
    } 

    # just for fun or because this is another application, we serve a subdirectory via apache on another server, also on the other server it's not /phpmyadmin but /tools/phpMyAdmin 
    location /phpmyadmin { 
     rewrite /phpmyadmin(.*)$ /tools/phpMyAdmin$1; 
     proxy_pass     10.0.1.21:80; 
     break; 
    } 

    # files with .php extension should be passed to the php-fpm backend, socket connection because it's on the same and we can save up the whole tcp overhead 
    location ~\.php$ 
    { 
     fastcgi_pass unix:/var/run/php-fpm.sock; 
     include /etc/nginx/fastcgi_params; 
     break; 
    } 
} 

utworzyć dowiązania aby domyślną vhost aktywny

ln -s /etc/nginx/vhosts.d/available/default.conf /etc/nginx/vhosts.d/active/. 
/etc/init.d/nginx restart 

Zobacz jak prosty i intuicyjny język konfiguracji nginx jest? Po prostu MAM to kochać :)

+0

Bardzo pomocny i pouczający! Dzięki za wiele przykładów. Zaczynam widzieć, jak bardzo elastyczny jest naprawdę nginx! Wesołych Świąt! – grep

Powiązane problemy