rekomendowana konfiguracja Nginx dla meteor

Konfiguracja strony dla mojej aplikacji meteor ma następujące dyrektywy:

server {
  listen 443;
  server_name XXX;

  ssl on;
  ssl_certificate XXX;
  ssl_certificate_key XXX;

  location / {
    proxy_pass http://localhost:3000;
    proxy_set_header X-Real-IP $remote_addr;  # http://wiki.nginx.org/HttpProxyModule
    proxy_http_version 1.1;  # recommended for keep-alive connections per http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_http_version
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
  }
}
W tym przypadku nie jest to konieczne, ponieważ nie jest to konieczne. Jak mam to zrobić? Czy są jeszcze inne rzeczy, które powinienem tu dodać?
Author: Dan Dascalescu, 2013-08-02

2 answers

Chociaż nie jestem ekspertem nginx, czuję, że mam dużo lepsze zrozumienie, jak to zrobić teraz. Jak dowiedzieć się więcej będę aktualizować tę odpowiedź.

Możliwe rozwiązanie mojego pierwotnego pytania Jest Takie:

location ~* "^/[a-z0-9]{40}\.(css|js)$" {
  root /home/ubuntu/app/bundle/programs/web.browser;
  access_log off;
  expires max;
}

Który mówi: dowolny adres URL dla tej strony zawierający ukośnik, po którym następuje 40 znaków alfanumerycznych + .js lub .css, można znaleźć w katalogu web.browser. Serwuj te pliki statycznie, nie zapisuj ich do dziennika dostępu i informuj klienta, że mogą być buforowane na zawsze.

Ponieważ główne pliki css i js mają unikalną nazwę po każdej operacji pakietu, powinno to być bezpieczne.

Zachowam pełną wersję tego przykładu tutaj. Warto również zauważyć, że używam niedawnej kompilacji nginx, która obsługuje WebSockets, jak mówiono o tutaj.

[3]} na koniec, nie zapomnij w pełni włączyć gzip w konfiguracji nginx. Moja sekcja gzip wygląda tak:
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
Po tym wszystkim udało mi się uzyskać przyzwoity wynik na pagespeed.

Aktualizacja 9/17/2014:

Zaktualizowano ścieżki dla meteor 0.9.2.1

 26
Author: David Weldon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-17 07:41:00

Zrobiłem kilka aktualizacji i ulepszeń do drugiej odpowiedzi. W szczególności

  • nagłówek X-Forwarded-For musi być ustawiony do wykrywania nowego adresu IP , które odbywa się w tym pliku . Nie wydaje się, aby X-Real-IP był używany.
  • ścieżka /nginx_status może być używana do monitorowania natężenia ruchu przechodzącego przez proxy.

Trochę się nad tym pokręciłem i wymyśliłem następującą konfigurację. Odpowiednio edytuj swoje pola.

Pierwszy, kompresji, co znacznie przyspiesza czas ładowania. Zauważ, że dyrektywa gzip_buffers jest zwykle domyślnie obliczana automatycznie przy użyciu rozmiaru strony pamięci systemu:

gzip on;                                                                                                                                                  
gzip_disable "msie6";                                                                                                                                     
gzip_min_length 1100;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

Sama konfiguracja serwera:

server {
    listen 443 ssl;
    server_name my.domain.com;

    ssl on;
    ssl_certificate /etc/ssl/nginx/certificate.crt;
    ssl_certificate_key /etc/ssl/nginx/certificate.key;

    access_log /var/log/nginx/localhost.ssl_access_log main;
    error_log /var/log/nginx/localhost.ssl_error_log info;

    # Forward to meteor server                                                                                                                        
    location / {
         proxy_pass http://localhost:3000;
         proxy_http_version 1.1;
         proxy_set_header Upgrade $http_upgrade;
         proxy_set_header Connection "upgrade";
         proxy_set_header Host $host;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    # copied from http://blog.kovyrin.net/2006/04/29/monitoring-nginx-with-rrdtool/
    location /nginx_status {
         stub_status on;
         access_log off;
         allow 192.168.0.0/24;
         deny all;
    }
}

Wreszcie, jak wspomniał Dan, będziesz musiał ustawić zmienną środowiskową HTTP_FORWARDED_COUNT W Meteorze, aby poprawnie odebrać IP klienta zza odwrotnego serwera proxy.

 9
Author: Andrew Mao,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-15 15:17:04