2016-04-11 41 views
16

Wprowadzenie

Od NGINX w wersji 1.9.11 i upwarts wprowadzono nową funkcję: moduły dynamiczne.

Za pomocą modułów dynamicznych można opcjonalnie ładować osobne pliki obiektów udostępnionych w środowisku wykonawczym jako moduły - zarówno moduły stron trzecich, jak i niektóre natywne moduły NGINX. (source)
Jak włączyć moduł dynamiczny z istniejącą instalacją NGINX

Moja konfiguracja i problem

Mam nginx zainstalowany z głównego nurtu (obecnie 1.9.14), dzięki czemu jest w stanie używać modułów dynamicznych. Posiada również moduł I chcą dynamicznie włączona:

nginx -V 
nginx version: nginx/1.9.14 
built by gcc 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.1) 
built with OpenSSL 1.0.1f 6 Jan 2014 
TLS SNI support enabled 
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules ... --with-http_geoip_module=dynamic ... 

Zanotować --with-http_geoip_module=dynamic który ładuje moduł muszę (dynamicznie). Niestety, brakuje dokumentacji (niektóre szczegóły) i nie jestem w stanie jej ustawić.
Mam istniejącą instalację NGINX (nie ze źródła). Ale o ile rozumiem, wystarczy zbudować moduł, umieścić wygenerowany plik modułu w odpowiednim folderze NGINX i włączyć go w pliku konfiguracyjnym.

co starałem tak daleko

Przetestowałem to na innym komputerze (z tej samej konfiguracji, ale nie maszyna produkcyjna), ale nie widzę pliku ngx_http_geoip_module.so. Komendy użyłem:

wget http://nginx.org/download/nginx-1.9.14.tar.gz 
tar -xzf nginx-1.9.14.tar.gz 
cd nginx-1.9.14/ 
./configure --with-http_geoip_module=dynamic 

pytania

  • Czy jest to problem, który próbuję zbudować moduł w systemie, który ma zainstalowany nginx nie ze źródeł?
  • Dlaczego nie ma pliku .so wygenerowanego przez moje polecenia?

Odpowiedz

14

Miałem to samo pytanie, a odpowiedź @vladiastudillo była brakującym elementem, którego potrzebowałem.

Pierwszy dodać nginx stabilnego repo:

sudo add-apt-repository ppa:nginx/stable 

następnie uruchomić apt update:

sudo apt-get update 

i dostać modułu nginx GeoIP:

sudo apt-get install nginx-module-geoip 

Będzie to pobrać i załadować moduł do /usr/lib/nginx/modules


Aby załadować moduł nginx,

otwarty nginx.conf:

sudo nano /etc/nginx/nginx.conf 

add dodać poniżej głównego kontekstu:

load_module "modules/ngx_http_geoip_module.so"; 

Moduł zostanie załadowany, gdy przeładowanie konfiguracja lub restart nginx.

Aby dynamicznie "rozładować" moduł, skomentuj lub usuń jego dyrektywę load_module i ponownie załaduj konfigurację nginx.

+0

muszę przeinstalować nginx z ppa? A może standardowy NGINX od Ubuntu jest wystarczający? – yoano

+0

jeśli NGINX jest zbudowany z modułami dynamicznymi, których nie trzeba instalować ponownie. Aby sprawdzić dostępne moduły wpisz 'nginx -V' i sprawdź ciąg dynamiczny. – miyuru

+0

Gdzie jest główny kontekst? –

0

miałem ten sam problem, trzeba zainstalować lib http_geoip_module dla danej wersji Ubuntu z:

$ sudo apt-get install nginx-module-GeoIP

+1

Próbowałem swoje polecenia, ale mam „Czytanie list pakietów ... Gotowe Budowanie drzewa zależności Odczyt informacji o stanie ... Gotowe E: Nie udało się odnaleźć pakietu nginx-module-GeoIP” – yoano

4

Okazało się, że nieco inaczej na Amazon Linux 2016.09, Amazon Linux 2016.03 po wykonaniu aktualizacji yum.

Można to potwierdzić z wyprzedzeniem za pomocą tego polecenia na przykład EC2 sudo yum search nginx-mod-http-geoip a zobaczysz wpis w odpowiedzi ze specyfiką nginx-mod-http-geoip.x86_64 : Nginx HTTP geoip module

w tych przypadkach N/S matched: nginx-mod-http-geoip zainstalowana wersja nginx będzie 1.10.1 . Kiedy to prawda, można prosta instalacja modułu nginx GeoIP od Amazona istniejącego yum repo poprzez:

sudo yum install nginx-mod-http-geoip

Następnie powiązać moduł z nginx.conf i umieszczenie tej linii w głównym kontekście

include /usr/share/nginx/modules/mod-http-geoip.conf;

(zauważ, że jest to subtelnie odmienne od głównej odpowiedzi - w aws masz wpis w pliku nginx.conf wskazujący na inny plik *.conf, który następnie wskazuje plik *.so)