web-dev-qa-db-fra.com

Comment installer nginx 1.9.15 sur une distribution Amazon linux

J'essaie d'installer la dernière version de nginx (> = 1.9.5) sur un nouvel Amazon linux pour utiliser http2. J'ai suivi les instructions décrites ici -> http://nginx.org/en/linux_packages.html

J'ai créé un fichier de référentiel /etc/yum.repos.d/nginx.repo avec ce contenu:

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck=0
enabled=1

Si je lance yum update et yum install nginx j'obtiens ceci:

nginx x86_64 1:1.8.1-1.26.amzn1 amzn-main 557 k

Il semblerait que cela se trouve toujours dans le dépôt principal amzn-main. Comment installer une nouvelle version de nginx?

- edit - J'ai ajouté "priority = 10" au fichier nginx.repo et je peux maintenant installer 1.9.15 avec yum install nginx avec le résultat suivant:

Loaded plugins: priorities, update-motd, upgrade-helper
Resolving Dependencies
--> Running transaction check
---> Package nginx.x86_64 1:1.9.15-1.el7.ngx will be installed
--> Processing Dependency: systemd for package: 1:nginx-1.9.15-1.el7.ngx.x86_64
--> Processing Dependency: libpcre.so.1()(64bit) for package: 1:nginx-1.9.15-1.el7.ngx.x86_64
--> Finished Dependency Resolution
Error: Package: 1:nginx-1.9.15-1.el7.ngx.x86_64 (nginx)
           Requires: libpcre.so.1()(64bit)
Error: Package: 1:nginx-1.9.15-1.el7.ngx.x86_64 (nginx)
           Requires: systemd
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest
7
wiesson

Vous obtenez une erreur car ces RPM nginx sont générés pour RHEL7, pas Amazon Linux. Amazon Linux est un hybride étrange de RHEL6, RHEL7 et Fedora. Vous devez contacter Amazon et leur demander de créer un RPM nginx19 approprié spécialement conçu pour leur distribution.

1
carlwgeorge

Si vous utilisez AWS Linux2, vous devez installer nginx à partir du "Référentiel des extras" AWS. Pour voir une liste des forfaits disponibles:

# View list of packages to install
Amazon-linux-extras list

Vous verrez une liste similaire à:

0  ansible2   disabled  [ =2.4.2 ]
1  emacs   disabled  [ =25.3 ]
2  memcached1.5   disabled  [ =1.5.1 ]
3  nginx1.12   disabled  [ =1.12.2 ]
4  postgresql9.6   disabled  [ =9.6.6 ]
5  python3   disabled  [ =3.6.2 ]
6  redis4.0   disabled  [ =4.0.5 ]
7  R3.4   disabled  [ =3.4.3 ]
8  Rust1   disabled  [ =1.22.1 ]
9  vim   disabled  [ =8.0 ]
10  golang1.9   disabled  [ =1.9.2 ]
11  Ruby2.4   disabled  [ =2.4.2 ]
12  nano   disabled  [ =2.9.1 ]
13  php7.2   disabled  [ =7.2.0 ]
14  lamp-mariadb10.2-php7.2   disabled  [ =10.2.10_7.2.0 ]

Utilisez la commande Amazon-linux-extras install pour l'installer, par exemple:

Sudo Amazon-linux-extras install nginx1.12

Plus de détails sont ici: https://aws.Amazon.com/Amazon-linux-2/faqs/ .

21
Dan Sterrett

Au moment de la rédaction de ce document, la dernière version de nginx disponible à partir du référentiel AWS yum est la 1.8.

La meilleure chose à faire pour le moment est de construire une version plus récente à partir des sources.

AWS Linux AMI dispose déjà des outils de génération nécessaires.

Par exemple, basé sur Nginx 1.10 (je suppose que vous êtes connecté en tant que ec2-user normal. Tout ce qui nécessite des droits de superutilisateur est précédé de Sudo)

cd /tmp #so we can clean-up easily
wget http://nginx.org/download/nginx-1.10.0.tar.gz
tar zxvf nginx-1.10.0.tar.gz && rm -f nginx-1.10.0.tar.gz
cd nginx-1.10.0
Sudo yum install pcre-devel openssl-devel #required libs, not installed by default
./configure \
  --prefix=/etc/nginx \
  --conf-path=/etc/nginx/nginx.conf \
  --pid-path=/var/run/nginx.pid \
  --lock-path=/var/run/nginx.lock \
  --with-http_ssl_module \
  --with-http_v2_module \
  --user=nginx \
  --group=nginx
make
Sudo make install
Sudo groupadd nginx
Sudo useradd -M -G nginx nginx
rm -rf nginx-1.10.0

Vous aurez ensuite besoin d'un fichier de service pour pouvoir démarrer/arrêter nginx et le charger au démarrage.

En voici un qui correspond à la configuration ci-dessus. Mettez-le dans /etc/rc.d/init.d/nginx:

#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig:   - 85 15
# description:  NGINX is an HTTP(S) server, HTTP(S) reverse \
#               proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /etc/nginx/nginx.conf
# config:      /etc/sysconfig/nginx
# pidfile:     /var/run/nginx.pid

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0

nginx="/etc/nginx/sbin/nginx"
prog=$(basename $nginx)

NGINX_CONF_FILE="/etc/nginx/nginx.conf"

[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx

lockfile=/var/run/nginx.lock

make_dirs() {
   # make required directories
   user=`$nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
   if [ -z "`grep $user /etc/passwd`" ]; then
       useradd -M -s /bin/nologin $user
   fi
   options=`$nginx -V 2>&1 | grep 'configure arguments:'`
   for opt in $options; do
       if [ `echo $opt | grep '.*-temp-path'` ]; then
           value=`echo $opt | cut -d "=" -f 2`
           if [ ! -d "$value" ]; then
               # echo "creating" $value
               mkdir -p $value && chown -R $user $value
           fi
       fi
   done
}

start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    make_dirs
    echo -n $"Starting $prog: "
    daemon $nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}

stop() {
    echo -n $"Stopping $prog: "
    killproc $prog -QUIT
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}

restart() {
    configtest || return $?
    stop
    sleep 1
    start
}

reload() {
    configtest || return $?
    echo -n $"Reloading $prog: "
    killproc $nginx -HUP
    RETVAL=$?
    echo
}

force_reload() {
    restart
}

configtest() {
  $nginx -t -c $NGINX_CONF_FILE
}

rh_status() {
    status $prog
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}

case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart|configtest)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
            ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
        exit 2
esac

Définissez le fichier de service pour qu'il soit exécutable:

Sudo chmod 755 /etc/rc.d/init.d/nginx

Maintenant, vous pouvez commencer avec:

Sudo service nginx start

Pour le charger automatiquement au démarrage:

Sudo chkconfig nginx on

Enfin, n'oubliez pas de modifier /etc/nginx/nginx.conf pour répondre à vos exigences et exécutez Sudo service nginx reload pour actualiser les modifications.

12
Lee Benson

Notez qu'il n'y a pas de 1.10 où vous cherchez. Vous pouvez voir la liste ici

http://nginx.org/packages/mainline/centos/7/x86_64/RPMS/

Après avoir utilisé yum update, utilisez yum search nginx pour voir les différentes versions que vous possédez et choisissez-en une spécifique:

yum search nginx

sur centos 6 donne

nginx.x86_64 : A high performance web server and reverse proxy server
nginx16.x86_64 : A high performance web server and reverse proxy server
nginx18.x86_64 : A high performance web server and reverse proxy server

J'ai deux versions au choix, 1.6 et 1.8.

1
Harry