Outils pour utilisateurs

Outils du site


www_apache2

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
www_apache2 [2012/01/12 00:22] thierrywww_apache2 [2012/05/10 20:49] (Version actuelle) thierry
Ligne 1: Ligne 1:
 ====== Apache2 ====== ====== Apache2 ======
 +===== Catch-all =====
 +
 +Lien: http://michauko.org/blog/2012/03/28/catch-all-dns-virtualhost-et-on-fait-mumuse-avec-les-noms-de-sous-domaines/
 +
 +" Catch-all DNS, VirtualHost et on fait mumuse avec les noms de sous-domaines " ... a suivre.
 +
 ===== Stress avec Curl-Loader ===== ===== Stress avec Curl-Loader =====
  
Ligne 57: Ligne 63:
 Donc: Donc:
   # ulimit -n 10000   # ulimit -n 10000
 +
 +==== Exemples de conf ====
 +
 +En pratique:
 +
 +J'ai fait des tests en utilisant des machines virtuels, dans un reseau virtualisé avec des interfaces "dummy".
 +
 +Les principaux interets:
 +  *le reseau est hyper rapide (estimé à 10Gb/s!) puisque tout passe en RAM 
 +  *ce reseau etant vierge, je suis libre d'y mettre n'importe quoi, y compris 2000 IPs :) 
 +
 +Voici une conf de test, largement inspiré de l'exemple "10K.conf".
 +  ########### GENERAL SECTION ################################
 +  BATCH_NAME= test  
 +  CLIENTS_NUM_MAX=10000
 +  CLIENTS_NUM_START=50
 +  CLIENTS_RAMPUP_INC=25
 +  INTERFACE=eth1    
 +  NETMASK=17  
 +  IP_ADDR_MIN= 192.168.128.32
 +  IP_ADDR_MAX= 192.168.191.255  #Actually - this is for self-control
 +  CYCLES_NUM= 5
 +  URLS_NUM= 3
 +  
 +  ########### URL SECTION ####################################
 +  
 +  URL=http://www.thierry-jaouen.fr/index.html
 +  URL_SHORT_NAME="www-index"
 +  REQUEST_TYPE=GET
 +  TIMER_URL_COMPLETION = 1500      # In msec. When positive, Now it is enforced by cancelling url fetch on timeout
 +  TIMER_AFTER_URL_SLEEP = 20
 +  
 +  ###
 +  
 +  URL=http://www.thierry-jaouen.fr/cgi-bin/agenda?action=query&year=2012&month=-1&style=gogol-the-first
 +  URL_SHORT_NAME="www-agenda"
 +  REQUEST_TYPE=GET
 +  TIMER_URL_COMPLETION = 5000      # In msec. When positive, Now it is enforced by cancelling url fetch on timeout
 +  TIMER_AFTER_URL_SLEEP = 2500
 +  
 +  ###
 +  
 +  URL=http://www.thierry-jaouen.fr/music/Devin_Townsend/Devin_Townsend_-_2011_-_Contain_Us/CD1/01_Synchronicity_Freaks.mp3
 +  URL_SHORT_NAME="www-music"
 +  REQUEST_TYPE=GET
 +  TIMER_URL_COMPLETION = 5000      # In msec. When positive, Now it is enforced by cancelling url fetch on timeout
 +  TIMER_AFTER_URL_SLEEP = 500
 +  
 +  ###
 +
 +
 +Donc, on va faire notre test en communicant via eth1 , avec beaucoup d'IP.
 +
 +  # curl-loader test.conf
 +
 +Voila.
  
 ===== Log Syslog ===== ===== Log Syslog =====
Ligne 243: Ligne 305:
   # /etc/init.d/nginx restart   # /etc/init.d/nginx restart
  
 +
 +Avec "rpaf", il faut modifier l'adresse local du proxy en editant "rpaf.conf" , pour par exemple:
 +  RPAFproxy_ips <IP_DU_PROXY>
 +
 +==== Logs ====
 +
 +Voir plus loin avec webalizer.
  
 ==== Tweaks et bugs ==== ==== Tweaks et bugs ====
Ligne 300: Ligne 369:
  
 Voila. Voila.
 +
 +==== https reverse proxy ====
 +
 +Liens:
 +  *http://www.cyberciti.biz/faq/howto-linux-unix-setup-nginx-ssl-proxy/
 +  *http://thomaswabner.wordpress.com/2009/11/17/create-self-signed-multi-domain-certificate/
 +  *http://nginx.org/en/docs/http/configuring_https_servers.html
 +
 +Soit un domain: toto.mondomain.fr
 +
 +  export NAME=toto.mondomain.fr
 +  
 +  openssl genrsa -des3 -out $NAME.key 1024
 +(entrer une passe phrase provisoire)
 +  openssl req -new -key $NAME.key -out $NAME.csr
 +
 +CN:toto.mondomain.fr
 +
 +Virer la pass-phrase:
 +  cp $NAME.key $NAME.key.bak
 +  openssl rsa -in $NAME.key.bak -out $NAME.key
 +
 +=== 1 domaine ===
 +
 +Un seul domaine
 +
 +  openssl x509 -req -days 3650 -in $NAME.csr -signkey $NAME.key -out $NAME.crt
 +
 +Les clefs sont prêtes.
 +
 +=== multi-domaine ===
 +
 +Lien: http://thomaswabner.wordpress.com/2009/11/17/create-self-signed-multi-domain-certificate/
 +
 +Il faut mettre plusieurs domaines dans le certificat de la facon suivante:
 +
 +Créer un fichier "$NAME.domain_extensions.txt" contenant :
 +<code>
 +[ mydomain_http ]
 +nsCertType      = server
 +keyUsage        = digitalSignature,nonRepudiation,keyEncipherment
 +extendedKeyUsage        = serverAuth
 +subjectKeyIdentifier    = hash
 +authorityKeyIdentifier  = keyid,issuer
 +subjectAltName          = @mydomain_http_subject
 +[ mydomain_http_subject ]
 +DNS.1 = sub1.mondomain.fr
 +DNS.2 = sub2.mondomain.fr
 +... etc ...
 +DNS.x = xxxx.mondomain.fr
 +</code>
 +
 +Et enfin
 +  openssl x509 -req -days 3650 -in $NAME.csr -signkey $NAME.key -out $NAME.crt -extfile $NAME.domain_extensions.txt -extensions mydomain_http
 +
 +Et voila: tout les domaines "DNS.1" a "DNS.x" sont associés aux clefs.
 +
 +| :!: Il serai aussi possible d'utiliser "*.mondomain.fr" |
 +
 +=== nginx ===
 +
 +FIXME : Un exemple, mais je n'ai pas tout compris... 
 +
 +  server {
 +  listen 443;
 +  server_name .thierry-jaouen.fr .tjaouen.fr;
 +  
 +  ssl on;
 +  ssl_certificate /etc/nginx/ssl/thierry-jaouen.fr.crt;
 +  ssl_certificate_key /etc/nginx/ssl/thierry-jaouen.fr.key;
 +  
 +  keepalive_timeout 60;
 +  
 +  location / {
 +    proxy_pass http://wwwcave.local.eez.fr:80/;
 +    access_log off;
 +  
 +    proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
 +  
 +    ### Set headers ####
 +    proxy_set_header Host $host;
 +    proxy_set_header X-Real-IP $remote_addr;
 +    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 +   
 +    ### Most PHP, Python, Rails, Java App can use this header ###
 +    proxy_set_header X-Forwarded-Proto https;
 +   
 +    ### By default we don't want to redirect it ####
 +    proxy_redirect     off;
 +  }
 +  
 +  }
 +
 +Le "https" est alors géré entre le client et **''nginx''** .
 +
 +**MAIS** , entre **''nginx''** et le serveur apache, ce n'est que du **''http''** .
 +
 +C'est pour cela que le flag "X-Forwarded-Proto https" est fixé.
 +
 +Ainsi, pour vos règles de **''rewrite''**, par exemple:
 +
 +Remplacer: 
 +| **''RewriteCond %{SERVER_PORT} !^443$''** |
 +par
 +| **''RewriteCond %{HTTP:X-Forwarded-Proto} !^https$''** |
  
 ===== Apache HA ===== ===== Apache HA =====
Ligne 486: Ligne 660:
  
  
-====== evasive ====== +====== Anti DoS ou evasive ====== 
-Protection contre DOS, etc ... +Protection contre DoS, etc ... 
  
-Lien: http://www.debianadmin.com/how-to-protect-apache-against-dosddos-or-brute-force-attacks.html+Liens: 
 +  *http://www.bortzmeyer.org/limit-apache.html 
 +  *http://www.debianadmin.com/how-to-protect-apache-against-dosddos-or-brute-force-attacks.html
  
 ====== webalizer ====== ====== webalizer ======
Ligne 564: Ligne 740:
   *http://www.cyberciti.biz/faq/unix-linux-merging-multiple-access-logs-with-logfile-merger/   *http://www.cyberciti.biz/faq/unix-linux-merging-multiple-access-logs-with-logfile-merger/
  
 +=== vite dit ===
  
   # aptitude install awstats   # aptitude install awstats
Ligne 587: Ligne 764:
  
 ... la dernière date traité faisant office de point de départ pour le fichier suivant. (toutes les dates anterieures étant ignoré) ... la dernière date traité faisant office de point de départ pour le fichier suivant. (toutes les dates anterieures étant ignoré)
 +
 +=== en pratique ===
 +
 +Soit les rotations de logs **''nginx''** et **''apache''** en "daily" (ou en weekly, mais identique)
 +
 +Soit : 
 +  - **''nginx''** qui génère des logs, et a la rotation quotidienne: ''/var/log/nginx/thierry-jaouen.fr.access.log.1''
 +  - **''apache''** qui génère des logs, et à la rotation quotidienne: ''/var/log/apache2/access.log.1''
 +
 +Soit dans **''webalizer.conf''** dans ''/usr/local/etc'' et contenant essentiennellement.
 +  
 +  # pas de ligne "LogFile"
 +  Incremental yes
 +
 +Soit dans **''/etc/cron.daily/''** un fichier nommé **''webalizer-update''** et contenant:
 +  #!/bin/sh
 +  /usr/local/bin/webalizer-update
 +
 +Soit un script nommé **''webalizer-update''** dans ''/usr/local/bin'' et contenant:
 +  #!/bin/sh
 +  
 +  # --------------------------------------------
 +  # - La conf est dans /etc/webalizer/webalizer.conf !!!
 +  # - La ligne "LogFile" est ignoré au profit de STDIN
 +  # - Desactiver/modifier le "cron.daily/webalizer" afin d'executer ce script
 +  # --------------------------------------------
 +  
 +  NAME=`basename $0`
 +  
 +  WEBALIZER=/usr/local/bin/webalizer
 +  MERGE=/usr/share/awstats/tools/logresolvemerge.pl
 +  
 +  STAT=/usr/bin/stat
 +  AWK=/usr/bin/awk
 +  
 +  # ------------------------------------
 +  # Les fichiers de LOGS a "merger"
 +  # ------------------------------------
 +  
 +  LOGS="/var/log/nginx/thierry-jaouen.fr.access.log.1 /var/log/apache2/access.log.1"
 +  
 +  logger -t ${NAME} "start ..."
 +  
 +  # Verifions l'existance des binaires principaux 
 +  
 +  if [ ! -x ${WEBALIZER} ] || [ ! -x ${MERGE} ] ; then
 +    echo "${WEBALIZER} or ${MERGE} missing" >&2
 +    exit 1
 +  fi
 +  
 +  # Verifier l'ecart de temps entre les 2 (premiers?) fichiers (2?)
 +  
 +  if ! EPOCHs="$( ${STAT} --printf='%Z ' ${LOGS} )" ; then
 +    echo "ERREUR: MERGE webalizer non effectué" >&2
 +    exit 1
 +  fi
 +  
 +  # ecart en secondes entre les dates de modifications des 2 fichiers (valeur absolue)
 +  DIFFS=$( echo ${EPOCHs} | ${AWK} -F' ' '{ diff=$2-$1; diff=(diff<0?-diff:diff); printf "%ld", diff; }' )
 +  
 +  # On tolere 120 secondes, soit 2 minutes
 +  
 +  if [ ${DIFFS} -ge 120 ]; then
 +    echo -e "ERREUR!\nEcart de ${DIFFS} secondes entre les fichiers:\n${LOGS}\nMERGE webalizer non effectué\n" >&2
 +    exit 1
 +  fi
 +  
 +  # Sinon Ok.
 +  
 +  logger -t ${NAME} "running... ${LOGS}"
 +  
 +  ${MERGE} ${LOGS} | ${WEBALIZER} -c /usr/local/etc/webalizer.conf -
 +  
 +  logger -t ${NAME} "end."
 +  
 +  # --------------
 +  # EOF
 +
 +Que fait ce script ?
 +  - il verifie que l'essentiel pour s'executer est en place
 +  - que l'ecart de date de modification entre les 2 fichiers n'est pas énorme (sinon, y a surement une rotation qui ne se fait pas)
 +  - merge et import des données dans webalizer
  
 ===== Compilation ===== ===== Compilation =====
Ligne 593: Ligne 852:
  
 D'abord, virer la version installé: D'abord, virer la version installé:
 +
 +:!: Faire des copies de sauvegarde de 
 +  /etc/webalizer/*conf
 +  /var/www/webalizer
 +Tout va disparaitre:
   # dpkg -P webalizer   # dpkg -P webalizer
  
Ligne 604: Ligne 868:
   # aptitude install gcc make libz-dev libpng-dev libgd2-noxpm-dev   # aptitude install gcc make libz-dev libpng-dev libgd2-noxpm-dev
      
- +  # exit 
 +  $ ./configure 
 +  $ make 
 +  $ su 
 +  # make install 
 + 
 +L'executable s'installe dans :  
 +  /usr/local/bin 
 +On mettra la conf dans: 
 +  /usr/local/etc 
 + 
 +Et voila ?
  
 +Bug corrigé.
      
  
www_apache2.1326327726.txt.gz · Dernière modification : 2012/01/12 00:22 de thierry