Bonsoir
Me revoila à la charge avec une nouvelle image Docker (qui compile et qui fonctionne 😃 )
J'ai donc créer une image docker contenant Nginx sous Alpine, mon but étant de créer un reverse proxy avec une image dédié à ça, car sur le docker hub on trouve des images nginx, mais pas dédié au reverse ou a la génération de page, elles font les deux. Le but étant d'essayer d'améliorer ma vitesse de chargement (même 0.05 secondes c'est toujours bien). En certificat SSL je vais commencer à migrer vers des certificats en ECDSA.
Donc j'aimerai séparer les deux, c'est pour ça que j'ai créer mon image Nginx

J'ai donc plusieurs questions ^^ :
- L'image est-elle bien / complète ?
- Est-ce mieux de mieux de mettre la compression avant d'envoyer au reverse proxy ou que ce soit le reverse proxy qui compresse ?
- Avez vous des conseils à me donner ? (autre que le fait d'avoir 2 RUN, c'est pour éviter d'avoir à retélécharger les 60 paquets, ça fait lourd sur ma petite connexion 😃

Voici mon Dockerfile

FROM alpine:3.5
MAINTAINER Dryusdan <contact@dryusdan.fr>
ENV UID=991 GID=991
ARG NGINX_VER=1.11.8
ARG NGINX_GPG="B0F4253373F8F6F510D42178520A9993A1C052F8"
ARG BUILD_CORES
ARG NGINX_CONF="--prefix=/nginx \
            --sbin-path=/usr/local/sbin/nginx \
            --http-log-path=/nginx/log/nginx_access.log \
            --error-log-path=/nginx/log/nginx_error.log \
            --pid-path=/nginx/run/nginx.pid \
            --lock-path=/nginx/run/nginx.lock \
            --user=web --group=web \
            --with-http_ssl_module \
            --with-http_realip_module \
            --with-http_addition_module \
            --with-http_sub_module \
            --with-http_gzip_static_module \
            --with-http_random_index_module \
            --with-http_secure_link_module \
            --with-http_stub_status_module \
            --with-threads \
            --with-stream \
            --with-stream_ssl_module \
            --with-http_slice_module \
            --with-mail \
            --with-mail_ssl_module \
            --with-http_v2_module \
            --with-ipv6 \
	--without-http_ssi_module \
	--without-http_scgi_module \
	--without-http_uwsgi_module \
	--without-http_geo_module \
	--without-http_autoindex_module \
	--without-http_map_module \
	--without-http_split_clients_module \
	--without-http_memcached_module \
	--without-http_empty_gif_module \
	--without-http_browser_module \
	--without-http_rewrite_module \
	--without-http_fastcgi_module \
	--add-module=/tmp/headers-more-nginx-module \
	--add-module=/tmp/ngx_brotli "

RUN BUILD_DEPS=" \
build-base \
	linux-headers \
ca-certificates \
	automake \
autoconf \
git \
tar \
	libtool \
	pcre-dev \
	zlib-dev \
	binutils \
	gnupg \
	cmake \
libressl-dev \
	go" \
&& apk -U add \ 
${BUILD_DEPS} \
s6 \
su-exec \
openssl \
pcre \
zlib \
&& NB_CORES=${BUILD_CORES-$(grep -c "processor" /proc/cpuinfo)} 
RUN \
cd /tmp && git clone https://github.com/bagder/libbrotli --depth=1 && cd libbrotli \
&& ./autogen.sh && ./configure && make -j ${BUILD_CORES} && make install \
&& cd /tmp \
&& git clone https://github.com/google/ngx_brotli \
&& git clone https://github.com/openresty/headers-more-nginx-module \
&& cp -R /tmp/libbrotli/brotli /tmp/ngx_brotli/deps && echo "*** LS ***" && ls /tmp/ngx_brotli/deps/brotli \
&& wget http://nginx.org/download/nginx-${NGINX_VER}.tar.gz \
&& wget http://nginx.org/download/nginx-${NGINX_VER}.tar.gz.asc \
&& gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$NGINX_GPG" \
&& gpg --batch --verify nginx-${NGINX_VER}.tar.gz.asc nginx-${NGINX_VER}.tar.gz \
&& tar xzf nginx-${NGINX_VER}.tar.gz \
&& cd /tmp/nginx-${NGINX_VER} \
	&& ./configure ${NGINX_CONF} \            
	&& make -j ${BUILD_CORES} \
	&& make install \
	&& apk del ${BUILD_DEPS} \
&& rm -rf /tmp/* /var/cache/apk/* 
#&& mkdir /sites-enabled /www /conf.d /passwds /certs /log

COPY rootfs /
RUN chmod +x /usr/local/bin/startup /etc/s6.d/*/*

EXPOSE 8080 8430

VOLUME /nginx

ENTRYPOINT ["/usr/local/bin/startup"]
CMD ["/bin/s6-svscan", "/etc/s6.d"]

Merci d'avance pour vos réponses 🙂 (et bonne nuit ^^ )

Nginx ne gènère pas de page, je vois pas ce que tu veux dire par "nginx fait les deux"

Il fait les deux du sens qu'il gère le rewriting d'url alors que c'est le reverse, l'ipv6 alors que c'est l'interne, des trucs comme ça ^^

    Dryusdan il gère le rewriting d'url alors que c'est le reverse

    Désolé mais ça n'a pas vraiment de sens ce que tu dis, je comprend pas trop ta problématique.
    Pareil pour l'ipv6, si tu as une adresse ipv6 sur ton serveur ça deviendra indispensable de gérer l'ipv6. (surtout avec la pénurie d'ipv4 qui arrive)

      Magicalex Désolé mais ça n'a pas vraiment de sens ce que tu dis,

      haha, c'est curieux ça m'étonne pas x)
      Y a peut-être (surement) pas d'utilité à ce que je fais... Hormis l'apprentissage ^^
      Et pour atteindre le total d'ipv4 sur un petit serveur privée faut y aller 😉

      En somme, ce que j'aimerai faire, c'est que le nginx en reverse soit uniquement dédié à ça, pas de module "inutile" type rewrite ou autre alors que le serveur interne ne doit pas avoir de module proxy_
      Hormis si ça change strictement rien en terme de perf 🙂

        Dryusdan Et pour atteindre le total d'ipv4 sur un petit serveur privée faut y aller 😉

        Atteindre le total??? Je pense que tu fais des confusions.

        Sinon c'est pas en désactivent ce genre de module que tu vas gagner en performance. Tu vas juste gagner en temps de compilation. Surtout que tu désactives des modules qui me semble indispensable comme de rewrite.
        Si tu veux faire des redirection https par exemple tu pourras plus.

        Si tu veux une image docker performante pour faire du reverse proxy, sur mondedie on utilise celle-ci https://hub.docker.com/r/wonderfall/boring-nginx/

        Atteintre le maximum d'ipv4 privée sur un réseau local plutôt 😉
        Ha d'accord :x tout ce joue dans la config donc ?
        Je l'utilise aussi actuellement, mais elle n'est plus maintenu et il n'y a pas le support d'ipv6 😊
        D'ailleurs, pourquoi libressl au lieu de openssl ? Vu que openssl comporte plus d'algorithme de chiffrement

          Dryusdan Atteintre le maximum d'ipv4 privée sur un réseau local plutôt

          On doit pas parler de la même chose alors...

          Dryusdan il n'y a pas le support d'ipv6 😊

          Effectivement il n y a pas d'ipv6, j'avais pas vu (ça change pas grand chose pour nous puisque ikoula notre hébergeur n'a pas d'ipv6 sur leur machine pour l'instant 🙁 )

          Pour libressl wonderfall en parle en détails ici https://mondedie.fr/d/7621-Tuto-Compiler-la-derniere-version-de-nginx-avec-LibreSSL

            Magicalex Pour libressl wonderfall

            D'accord, donc il y a moins d'algorithme pour plus d'efficacité ? Merci pour l'info 🙂
            Dans tout les cas, Google à mis a jour leur code brotli, et il est plus possible de compiler l'image de Wonderfall sans devoir faire cp -R /tmp/libbrotli/brotli /tmp/ngx_brotli/deps

            Magicalex On doit pas parler de la même chose alors...

            Hum... Je me suis mal exprimé au début et donc il y a eu un quiproco, je voulais dire que les serveurs nginx placé en back-end n'ont pas besoin du support ipv6, vu qu'ils n'ont pas d'accès extérieur et que le nombre d'ip disponible pour un réseau privée est conséquent.

            D'ailleurs, petite question, est-il mieux que la compression des données (gzip, brotli) se fasse avec le reverse proxy ou avec les serveurs en backend ? 🙂

            Merci en tout cas de prendre du temps et désespérer à chaque fois que tu me lis x)

            Répondre…