web-dev-qa-db-fra.com

NGinx Module non compatible Binaire après la compilation sur Centos 7

J'ai besoin d'utiliser le module Nginx ngx_http_auth_pam_module sur un serveur Centos 7. Comme un package n'est disponible que via le référentiel getpageSpeed, qui n'est pas Gratis, je veux le compiler moi-même.

Après diverses instructions que j'ai trouvées, j'ai téléchargé les sources du module et pour Nginx, répertorie les options de compilation de la version de NGinx installée avec nginx -V, puis compilé le module avec ./configure alors make modules, installer des paquets pour fixer les différentes erreurs dans le processus.

Cependant, lorsque j'essaie de configurer Nginx pour utiliser le module nouvellement compilé, nginx -t Donne moi nginx: [emerg] module "/opt/nginx/modules/ngx_http_auth_pam_module.so" is not binary compatible in /usr/share/nginx/modules/mod-http-auth-pam.conf:1

De ce que j'ai lu, cette erreur "non compatible binaire" est due à différents drapeaux de compilation dans la version installée de Nginx vs le module, mais je me suis assuré de copier tous ceux donnés par nginx -V. Je me suis également assuré de télécharger le code source de la même version de Nginx comme installé.

Une idée de ce qui pourrait causer le problème? Devrais-je simplement désinstaller Nginx et réinstaller la version compilée ou cela vient-il avec ses propres problèmes?

Annexe :

voici l'ensemble de ./configure commande:

./configure --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-path=/run/nginx.pid --lock-path=/run/lock/subsys/nginx --user=nginx --group=nginx --with-file-aio --with-ipv6 --with-http_auth_request_module --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module=dynamic --with-http_image_filter_module=dynamic --with-http_geoip_module=dynamic --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_slice_module --with-http_stub_status_module --with-http_Perl_module=dynamic --with-mail=dynamic --with-mail_ssl_module --with-pcre --with-pcre-jit --with-stream=dynamic --with-stream_ssl_module --with-google_perftools_module --with-debug --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic' --with-ld-opt='-Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-E' --with-compat --add-dynamic-module=../ngx_http_auth_pam_module/

Et ici le nginx -V

nginx version: nginx/1.12.2
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-path=/run/nginx.pid --lock-path=/run/lock/subsys/nginx --user=nginx --group=nginx --with-file-aio --with-ipv6 --with-http_auth_request_module --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module=dynamic --with-http_image_filter_module=dynamic --with-http_geoip_module=dynamic --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_slice_module --with-http_stub_status_module --with-http_Perl_module=dynamic --with-mail=dynamic --with-mail_ssl_module --with-pcre --with-pcre-jit --with-stream=dynamic --with-stream_ssl_module --with-google_perftools_module --with-debug --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic' --with-ld-opt='-Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-E'
8
user153991

S'avère, le --with-compat Option causait la question. Je l'ai ajouté parce que le guide sur Nginx.com l'a dit, mais après le retrait et la compilation d'une fois de plus, nginx -t me dit que la configuration est bonne.

3
user153991

Suppression --with-compat L'option ne peut éventuellement résoudre.

Si vous avez eu l'erreur du module incompatible binaire compilée avec cette option, cela signifie que si vous l'avez compilée pour une version et chargée dans une version différente. Par exemple. Le module a été compilé contre Nginx Source 1.16.0 pendant que vous le chargez (en utilisant) dans NGinx 1.12.2. Et cette version est très ancienne à la manière et dispose de vulnérabilités de sécurité HTTP/2, pour lesquelles vous devez Mettre à jour .

Si quelque chose, il n'y a pas beaucoup de raison non utiliser --with-compat.

Je suis très poléité en disant cela, mais getPageSpeed ​​Repo, tout en étant PAS gratuit pour CentOS 7 (gratuit pour Centos/Rhel 8 à partir de cette écriture), vous permet d'obtenir des modules toujours à jour pour les nouvelles versions Nginx, qui sont libéré régulièrement et aborder de nouvelles questions de sécurité ainsi que des fonctionnalités ajoutées. Sinon, vous devez recompiler en permanence des modules par opposition à yum update et se retrouver potentiellement avec un logiciel de compilation sur le système de production. Qui est une question de sécurité à part.

L'alternative GevePageSpeed ​​s'abonne à Nginx Plus, qui coûte beaucoup plus de quelques dollars.

1
Danila Vershinin

Une manière plus compatible:

  1. découvrez la version actuelle de l'instance Nginx via nginx -v
  2. clonez le code source NGinx et la caisse que la balise, comme "version-1.18.0".
  3. Configurez la source avec exactement les mêmes options via:
auto/configure --add-dynamic-module=/path/to/your/module `nginx -V`
  1. make
0
clarkttfu