To sidebar

Apache/PHP/Nginx/MySQL

Fil des billets

jeudi, 15. juin 2017

Cloudflare et Google Map, une solution pour le chargement de la carte...

J'ai récemment activé RocketLoader sur Clouflare afin d'optimiser les différents temps de chargement de mes pages contenant du javascript.
Le problème, c'est que le système de vérification de clé api de Google pour afficher une Google Map sur l'un de mes sites ne se chargeait plus correctement.

En fait, beaucoup de script Google ne fonctionnaient plus.

Du coup, comment faire ?
Activer manuellement ? Désactiver RocketLoader ?
Ce serait dommage étant donné le gain conséquent en réactivité des sites utilisant du javascript.

En fait, la solution est toute simple, il suffit d'indiquer à Cloudflare d'exclure certains script en modifiant les balises d'appel comme suit :

<script type='text/javascript' src='$src'></script>

par :

<script data-cfasync='false' type='text/javascript' src='$src'></script>

A noter que data-cfasync='false' DOIT se trouver AVANT l'appel src= sinon, il serait ignoré...

Source : snippets.webaware.com.au

dimanche, 9. décembre 2012

Hôte automatique sous Apache et Nginx

J'ai longtemps cherché un moyen simple de gérer automatiquement mes sites sous Apache, et récemment sous Nginx.

La problématique est la suivante, j'ai créé une entrée DNS générique *.bagu.biz afin que tous les sous-domaines soient pris en compte sans que j'ai besoin de les rajouter manuellement.
Du coup, il ne me manquait plus qu'une solution afin que lorsque je créé un dossier, automatiquement le sous-domaine associé soit disponible.

Cela confère l'énorme avantage de ne jamais avoir à toucher au DNS et de pouvoir créer rapidement et facilement des sites associés au domaine principal.

Voici l’arborescence utilisée pour bagu.biz par exemple :
\www\wwwbagubiz\html

Dans lequel se trouve un dossier "www" pour www.bagu.biz et un dossier "blog" pour blog.bagu.biz.
Il y a aussi un dossier \www\wwwbagubiz\logs pour la réception des logs
Sous Apache, c'est ultra simple à faire :

<VirtualHost *:80>
    ServerName www.bagu.biz
    DocumentRoot /www/wwwbagubiz/html/

    ServerAlias bagu.biz *.bagu.biz
    VirtualDocumentRoot /www/wwwbagubiz/html/%1

    RewriteEngine on
    RewriteCond %{HTTP_HOST}   ^bagu.biz [NC]
    RewriteRule ^(.*)         http://www.bagu.biz$1 [R=301,L]

    <IfModule fcgid_module>
        # Fcgid pmadb bug
        RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization},L]
        <Files ~ "\.php$">
            Options Indexes FollowSymLinks ExecCGI
            AddHandler fcgid-script .php
            FcgidWrapper "d:/wamp/php/php-cgi.exe -d error_log=/www/wwwbagubiz/logs/php_error.log" .php
        </Files>
    </IfModule>
   
    <IfModule !fcgid_module>
        php_admin_value error_log /www/wwwbagubiz/logs/php_error.log
    </IfModule>

    <Directory /www/wwwbagubiz/html/>
        Options Indexes FollowSymLinks
        AllowOverride all
        Require all granted
    </Directory>
</VirtualHost>

A savoir que les lignes Rewrite servent à réécrire http://bagu.biz en http://www.bagu.biz dans le cadre d'une optimisation du référencement.
Il est bon de noter aussi que je prévois l'utilisation de FCGID pour lancer PHP, mais j'ai aussi le cas ou PHP serait chargé en tant que module pour la prise en charge de l'enregistrement des logs PHP.

Maintenant, sous Nginx, c'est une autre paire de manches. Beaucoup le trouvent plus simple et/ou plus rapide, ce n'est pas mon cas...Même lors de montées en charge, le serveur Apache fait aussi bien que Nginx dans mon cas.
Je précise bien qu'il ne s'agit que de mon cas, il ne faut pas faire de généralités. En effet, sous Windows, Nginx ne peut pas profiter de php-fpm pour le lancement de scripts PHP, et c'est un très gros manque.
Nul doute que sous Linux, la différence de performances aurait été bien marquée.

Donc voici l'équivalent Nginx :

server {
  listen 80;

  server_name bagu.biz *.bagu.biz;

  if ($host ~* ^bagu\.biz$) {
    rewrite ^ http://www.bagu.biz permanent;
  }

  if ($host ~* ^(.*)\.bagu\.biz$) {
    set $subdomain "$1";
  }

  root /www/wwwbagubiz/html/$subdomain;
 
  index index.php index.html index.htm;
 
  client_max_body_size 32M; # set maximum upload size

  # deny direct access
  location ~ ^/(data|config|\.ht|db_structure\.xml|README) {
    deny all;
  }

  # default try order
  location / {
    try_files $uri $uri/ index.php =404;
  }

  # enable php
  location ~* \.php$ {
    try_files $uri =404;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
  }
}

Comme vous pourrez le constater, la partie de gestion des sous-domaines est infiniment plus complexe et nécessite l'utilisation du rewriting.
Cependant, cela fonctionne très bien.

A noter que si vous tentez d'utiliser Apache en même temps qu'Nginx et que vous êtes sous Windows, vous risquez de vous retrouver confronter à un bugs empêchant le lancement de scripts PHP au bout d'un certain temps.
Je n'ai, à ce jour, pas encore trouver de solution à cela (sous Linux, avec php-fpm, aucun problèmes).

J'expliquerais dans un prochain billet comment j'ai créé un service Nginx + PHP permettant un bon fonctionnement en tant que service sous Windows, le tout, redémarrable.

Avec ce système, si je créé un dossier "truc" dans \www\wwwbagubiz\html, automatiquement, http://truc.bagu.biz existera et sera exploitable, et ce sans avoir à toucher au virtualhost, ni au DNS.

samedi, 1. décembre 2012

PHP 5.5.0 et le nouveau système de gestion des mots de passe

Depuis le temps que j'attendais ça....

Si vous avez eu à coder un peu avec PHP, vous avez dû vous rendre compte de la misère que c'est pour gérer les mots de passe...
Il y a 20.000 techniques différentes dont le 7/8ème sont foireuses, et le restant est super compliqué ou très peu performant.
Le nouveau système livré avec PHP 5.5.0 est simple, s'appuie sur bcrypt (par défaut) et va vraiment uniformiser tout ce merdier (désolé, mais c'est le mot le plus approprié ^^)

Du coup, sachant que certains voudront plus de détails, voici le lien décrivant le système :

https://wiki.php.net/rfc/password_hash

Et voici le lien du changelog complet :

https://github.com/php/php-src/blob/php-5.5.0alpha1/NEWS

samedi, 12. mai 2012

Apache 2.4.0/2.4.1/2.4.2

Je suis récemment passé de apache 2.2.22 vers 2.4.2 et j'ai été confronté à un petit soucis bien chiant, au bout de 10 minutes, le serveur refusait toute nouvelle connexion.

J'avais déjà noté la disparition de win32disableacceptex et je pensais donc que ce bug avait été résolu.

Eh bien non, Donc pour ceux qui cherchent, il y a une solution simple.
En fait, il faut rajouter ceci dans httpd.conf :

AcceptFilter http none
AcceptFilter https none

Et changer deux autres valeurs :

EnableMMAP off
EnableSendfile off

A noter que ceci est valable sur windows, mais je ne sais pas si c'est le cas pour linux.

- page 1 de 2

© Le blog de bagu, after the WP Dusk To Dawn theme Propulsé par Dotclear