Aller au contenu

Haproxy en conflit avec Web Station


Messages recommandés

Bonjour à tous,

c'est mon premier post ici mais je me suis déjà bien abreuvé des infos que j'ai pu trouver sur le forum.

Hier j'ai commencé ma conf Haproxy afin de faire du reverse proxy pour les différents services que j'utilise. Jusque là tout va bien mais je m'aperçois qu'en rebootant mon syno, les services "httpd-user" et "Web Station service" ne démarrent pas.

Idéalement j'aimerais attribuer une adresse du type appweb.domaine.com à mes application web (TTRSS et Owncloud), comme je l'ai fait pour les services "classiques" (ex dsm, download station...). J'imagine que je vais devoir utiliser les Virtual Host du syno pour attribuer un port spécifique à mes applis web, mais Web Station ne voulant pas démarrer je ne peux pas aller plus loin.

Je pense avoir une conf qui tient la route, mais je vous demande votre avis sur celle ci.

Vous avez une idée de ce qui empêche "httpd-user" et "Web Station service" de démarrer ?

Merci d'avance.

 

Modifié par nougalo
Lien vers le commentaire
Partager sur d’autres sites

  1. ne fais pas écouter haproxy sur le port TCP80 ou 443 (ou tout autre port utilisé par le synology) => laisse les ports par défaut
  2. place tous les services dont tu as besoin (ttrss, ...) derrière haproxy
  3. forward les ports de ton routeurs vers ceux d'haproxy

ps : on ne peut pas accéder aux fichiers uplodé ici, copie colle la conf)

Modifié par Fenrir
Lien vers le commentaire
Partager sur d’autres sites

Merci pour ta réponse Fenrir,

J'ai laissé le port d'écoute de base sur Haproxy (82'80) et sur mon routeur j'ai redirigé les '80 et 443 vers le http et le https d'Haproxy (5080 & 5443). J'ai vu plusieurs fois ce genre de conf, tu penses que ce n'est pas bon ?

Ma conf :

global
	daemon
	maxconn 256
	log localhost user info
	spread-checks 10
	tune.ssl.default-dh-param 2048

defaults
	mode http
	stats enable
	default-server inter 30s fastinter 5s
	log global
	option httplog
	timeout connect 5s
	timeout client 50s
	timeout server 50s
	timeout tunnel 1h

listen stats :8280
	stats uri /
	stats show-legends
	stats refresh 10s
	stats realm Haproxy\ Statistics
	stats auth admin:password

userlist my_users
        user monuser insecure-password monpassword

frontend http
	bind :5080
	redirect scheme https unless { hdr_beg(Host) -i web. }
	use_backend web if { hdr_beg(Host) -i web. }
	default_backend web

frontend https
	bind :5443 ssl crt /usr/local/haproxy/var/crt/default.pem ciphers AESGCM+AES128:AES128:AESGCM+AES256:AES256:RSA+RC4+SHA:!RSA+AES:!CAMELLIA:!aECDH:!3DES:!DSS:!PSK:!SRP:!aNULL no-sslv3
	option http-server-close
	option forwardfor
	rspirep ^Location:\ http://(.*)$    Location:\ https://\1
	rspadd Strict-Transport-Security:\ max-age=31536000;\ includeSubDomains
	use_backend dsm if { hdr_beg(Host) -i dsm. }
	use_backend sabnzbd if { hdr_beg(Host) -i sabnzbd. }
	use_backend nzbget if { hdr_beg(Host) -i nzbget. }
	use_backend sickbeard if { hdr_beg(Host) -i sickbeard. }
	use_backend couchpotatoserver if { hdr_beg(Host) -i couchpotatoserver. }
	use_backend headphones if { hdr_beg(Host) -i headphones. }
	use_backend maraschino if { hdr_beg(Host) -i maraschino. }
	use_backend znc if { hdr_beg(Host) -i znc. }
	use_backend transmission if { hdr_beg(Host) -i transmission. }
	use_backend gateone if { hdr_beg(Host) -i gateone. }
	use_backend webdav if { hdr_beg(Host) -i webdav. }
	use_backend audio if { hdr_beg(Host) -i audio. }
	use_backend download if { hdr_beg(Host) -i download. }
	use_backend surveillance if { hdr_beg(Host) -i surveillance. }
	use_backend video if { hdr_beg(Host) -i video. }
	use_backend file if { hdr_beg(Host) -i file. }
	use_backend haproxy if { hdr_beg(Host) -i haproxy. }
	use_backend deluge if { hdr_beg(Host) -i deluge. }
	use_backend plex if { hdr_beg(Host) -i plex. }
	default_backend web

backend web
	server web localhost:80 check

backend dsm
	server dsm localhost:5000 check

backend sabnzbd
	server sabnzbd localhost:8080 check

backend nzbget
	server nzbget localhost:6789 check

backend sickbeard
	server sickbeard localhost:8081 check

backend couchpotatoserver
	server couchpotatoserver localhost:5050 check

backend headphones
	server headphones localhost:8181 check

backend maraschino
	server maraschino localhost:8260 check

backend znc
	server znc localhost:8250 check

backend transmission
	server transmission localhost:9091 check

backend gateone
	server gateone localhost:8271 ssl check verify none

backend webdav
	server webdav localhost:5005 check

backend audio
	server audio localhost:8800 check

backend download
	server download localhost:8000 check

backend surveillance
	server surveillance localhost:9900 check

backend video
	server video localhost:9007 check

backend file
	server file localhost:7000 check

backend haproxy
	server haproxy localhost:8280 check

backend deluge
	server deluge localhost:8112 check

backend plex
	acl auth_access http_auth(my_users)
	http-request auth realm Authentification if !auth_access
	server plex localhost:32400 check

backend tt-rss
	server tt-rss localhost:6661 check

 

Lien vers le commentaire
Partager sur d’autres sites

Je ne connais pas par cœur les directive d'haproxy, mais tu n'as pas déclaré d'association frontend-backend pour ttrss.

...

frontend https
	...
	use_backend ttrss if { hdr_beg(Host) -i ttrss. }
	default_backend web

...

backend ttrss
	server ttrss localhost:6661 check

 

Lien vers le commentaire
Partager sur d’autres sites

Non c'est vrai, sur la conf que j'ai posté ici j'avais dégagé l'association avec le frontend qui ne fonctionnait pas. Avec le backend je voulais rediriger sur le port 6661, port que j'aimerai attribué via un virtual host. J'imagine qu'une conf comme ça devrait marcher, mais appache ne veux pas démarrer (cf mon premier message) donc les virtual host ne fonctionnent pas.

SI j'ai bien saisi, avec un virtual host du style :

sous dossier : tt-rss, hostname : tt-rss.domain.com, HTTP,  sur port 6661

Plus une association backend frontend ça devrait passer. Mais pas d'apache, donc pas de virtual host.

Ce que je dis te semble logique ?

Lien vers le commentaire
Partager sur d’autres sites

oui et non, Apache, Nginx et haproxy peuvent tous les 3 répondre à ton besoin, mais pas aussi facilement.

  • ne touche pas à la conf d'apache
  • fait en sorte que tes appli fonctionnent dans leur conf par défaut
  • utilise haproxy pour modifier les url/port

Je te recommande d'utiliser haproxy car c'est le seul dont la configuration n'est pas altérée par les mises à jour de synology et les appli par défaut.

Pour info/rappel, un reverse proxy est un serveur "mandataire" :

 

Lien vers le commentaire
Partager sur d’autres sites

J'avais une erreur dans ma conf apache que j'avais bidouillé avant de m'attaquer à Haproxy, j'ai restaurer le fichier httpd.conf-user d'origine est maintenant mon service tt-rss peut démarrer en local. Super :). Du coup, je n'utilise que Haproxy pour mes redirections, comme tu le conseil Fenrir.


En fait, ce que je me demandais au début, c'est comment faire une redirection dans haproxy pour un service comme ttrss, qui est un site web donc dans le dossier www. Avec les autres appli c'est plus simple, elles ont directement un port sur lequel on s'appuie pour faire la redirection, mais ttrss utilisant le port 80 j'ai pensai qu'il fallait passer par les virtual host. Ca me permettrai d'attribuer un port à ttrss, puis de faire ma redirection.

Fenrir, t'en pense quoi ? Tu l'as déjà fait ?

Lien vers le commentaire
Partager sur d’autres sites

Après avoir configuré un virtual host via l'interface synology pour TT-RSS du style :

nom du service :tt-rss

nom d'hote : localhost

port : 6661

protocole : HTTP

J'arrive à accéder à l'application depuis l'adresse locale : mon@ip:6661 (donc mon virtual host semble OK), mais la redirection que j'ai mis en place dans Haproxy ne fonctionne pas et me renvoi sur un :

503 Service Unavailable
No server is available to handle this request.

Quelqu'un a une idée pour router l'application via Haproxy ?

Lien vers le commentaire
Partager sur d’autres sites

Ci dessous ma conf apache, mais qui est normalement la conf par défaut :

ServerRoot "/etc/httpd"

Listen 80

LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_owner_module modules/mod_authz_owner.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule include_module modules/mod_include.so
LoadModule filter_module modules/mod_filter.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule log_config_module modules/mod_log_config.so
#LoadModule logio_module modules/mod_logio.so
LoadModule env_module modules/mod_env.so
LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule headers_module modules/mod_headers.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule mime_module modules/mod_mime.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule asis_module modules/mod_asis.so
LoadModule cgid_module modules/mod_cgid.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule dir_module modules/mod_dir.so
LoadModule actions_module modules/mod_actions.so
LoadModule userdir_module modules/mod_userdir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so

User http
Group http

ServerAdmin admin
ServerName *:80

<Directory />
    Options FollowSymLinks
    AllowOverride All

    RewriteEngine on
    RewriteCond %{HTTP:Transfer-Encoding} chunked
    RewriteRule ^(.*)$ http://localhost:412/$1 [P]
</Directory>

<Directory "/var/services/web">
    Options MultiViews FollowSymLinks ExecCGI
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

<Directory "/usr/syno/synoman/phpsrc/web">
    Options MultiViews FollowSymLinks ExecCGI
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

<Directory "/usr/syno/synoman/empty/web">
    Options MultiViews FollowSymLinks ExecCGI
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

<IfModule dir_module>
    DirectoryIndex index.html index.htm index.cgi index.php index.php5
</IfModule>

<FilesMatch "^\.ht">
    Order allow,deny
    Deny from all
    Satisfy All
</FilesMatch>

ErrorLog /var/log/httpd/user-error_log
#ErrorLog /dev/null
TraceEnable off

LogLevel error

<IfModule log_config_module>
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common

    <IfModule logio_module>
        LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>

    CustomLog /dev/null combined
    #CustomLog /var/log/httpd/user-access_log combined
</IfModule>

<IfModule alias_module>
    Alias /webman/pingpong.php /usr/syno/synoman/phpsrc/pingpong.php
</IfModule>

ScriptSock /run/httpd/user-cgisock

DefaultType text/plain

<IfModule mime_module>
    TypesConfig conf/mime.types
    AddEncoding x-compress Z
    AddEncoding x-gzip gz tgz
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
    AddType image/x-icon .ico
    AddHandler cgi-script .cgi
</IfModule>

MIMEMagicFile conf/magic

<IfDefine HAVE_PHP>
    Alias /webdefault/ "/usr/syno/synoman/phpsrc/web/"
</IfDefine>
<IfDefine !HAVE_PHP>
    Alias /webdefault/ "/usr/syno/synoman/empty/web/"
</IfDefine>

<IfDefine HAVE_PHP>
    ErrorDocument 403 /webdefault/error.html
    ErrorDocument 404 /webdefault/error.html
    ErrorDocument 500 /webdefault/error.html
    Include conf/extra/mod_fastcgi.conf
</IfDefine>

EnableMMAP off

Include conf/extra/httpd-mpm.conf-user
Include conf/extra/httpd-autoindex.conf-user
Include conf/extra/httpd-languages.conf-user
Include conf/extra/httpd-default.conf-user

<IfDefine SSL>
    <IfDefine !SPDY>
        LoadModule ssl_module modules/mod_ssl.so
        Include conf/extra/httpd-ssl.conf
    </IfDefine>
    <IfDefine SPDY>
        LoadModule ssl_module modules/mod_ssl_npn.so
        Include conf/extra/httpd-ssl.conf
        Include conf/extra/mod_spdy.conf
    </IfDefine>
</IfDefine>

<IfModule deflate_module>
    DeflateCompressionLevel 2
    AddOutputFilterByType DEFLATE text/html text/plain text/xml
    AddOutputFilter DEFLATE js css
    BrowserMatch ^Mozilla/4 gzip-only-text/html
    BrowserMatch ^Mozilla/4\.[0678] no-gzip
    BrowserMatch \bMSIE\s7  !no-gzip !gzip-only-text/html
</IfModule>


<Files *.js>
    Header unset Etag
</Files>

<Files *.css>
    Header unset Etag
</Files>

# For CVS-2001-1446
<Files ~ "^\.([Hh][Tt]|[Dd][Ss]_[Ss])">
    Order allow,deny
    Deny from all
    Satisfy All
</Files>

# For @eaDir
<DirectoryMatch "@eaDir">
    Order allow,deny
    Deny from all
    Satisfy All
</DirectoryMatch>

# For CVE-2003-1418
FileETag MTime Size

<VirtualHost *:80>
    Include sites-enabled-user/*.conf
</VirtualHost>

include conf/extra/mod_xsendfile.conf-user
Include conf/extra/httpd-reqtimeout.conf
Include conf/extra/httpd-proxy-autoconf.conf-user

Et ici ma conf Haproxy :

global
	daemon
	maxconn 256
	log localhost user info
	spread-checks 10
	tune.ssl.default-dh-param 2048

defaults
	mode http
	stats enable
	default-server inter 30s fastinter 5s
	log global
	option httplog
	timeout connect 5s
	timeout client 50s
	timeout server 50s
	timeout tunnel 1h

listen stats :8280
	stats uri /
	stats show-legends
	stats refresh 10s
	stats realm Haproxy\ Statistics
	stats auth admin:password

userlist my_users
        user monuser insecure-password monpassword

frontend http
	bind :5080
	redirect scheme https unless { hdr_beg(Host) -i web. }
	use_backend web if { hdr_beg(Host) -i web. }

frontend https
	bind :5443 ssl crt /usr/local/haproxy/var/crt/default.pem ciphers AESGCM+AES128:AES128:AESGCM+AES256:AES256:RSA+RC4+SHA:!RSA+AES:!CAMELLIA:!aECDH:!3DES:!DSS:!PSK:!SRP:!aNULL no-sslv3
	option http-server-close
	option forwardfor
	rspirep ^Location:\ http://(.*)$    Location:\ https://\1
	rspadd Strict-Transport-Security:\ max-age=31536000;\ includeSubDomains
	use_backend dsm if { hdr_beg(Host) -i dsm. }
	use_backend sabnzbd if { hdr_beg(Host) -i sabnzbd. }
	use_backend nzbget if { hdr_beg(Host) -i nzbget. }
	use_backend sickbeard if { hdr_beg(Host) -i sickbeard. }
	use_backend couchpotatoserver if { hdr_beg(Host) -i couchpotatoserver. }
	use_backend headphones if { hdr_beg(Host) -i headphones. }
	use_backend maraschino if { hdr_beg(Host) -i maraschino. }
	use_backend znc if { hdr_beg(Host) -i znc. }
	use_backend transmission if { hdr_beg(Host) -i transmission. }
	use_backend gateone if { hdr_beg(Host) -i gateone. }
	use_backend webdav if { hdr_beg(Host) -i webdav. }
	use_backend audio if { hdr_beg(Host) -i audio. }
	use_backend download if { hdr_beg(Host) -i download. }
	use_backend surveillance if { hdr_beg(Host) -i surveillance. }
	use_backend video if { hdr_beg(Host) -i video. }
	use_backend file if { hdr_beg(Host) -i file. }
	use_backend haproxy if { hdr_beg(Host) -i haproxy. }
	use_backend deluge if { hdr_beg(Host) -i deluge. }
	use_backend plex if { hdr_beg(Host) -i plex. }
	use_backend tt-rss if { hdr_beg(Host) -i ttrss2. }

backend web
	server web localhost:80 check

backend dsm
	server dsm localhost:5000 check

backend sabnzbd
	server sabnzbd localhost:8080 check

backend nzbget
	server nzbget localhost:6789 check

backend sickbeard
	server sickbeard localhost:8081 check

backend couchpotatoserver
	server couchpotatoserver localhost:5050 check

backend headphones
	server headphones localhost:8181 check

backend maraschino
	server maraschino localhost:8260 check

backend znc
	server znc localhost:8250 check

backend transmission
	server transmission localhost:9091 check

backend gateone
	server gateone localhost:8271 ssl check verify none

backend webdav
	server webdav localhost:5005 check

backend audio
	server audio localhost:8800 check

backend download
	server download localhost:8000 check

backend surveillance
	server surveillance localhost:9900 check

backend video
	server video localhost:9007 check

backend file
	server file localhost:7000 check

backend haproxy
	server haproxy localhost:8280 check

backend deluge
	server deluge localhost:8112 check

backend plex
	acl auth_access http_auth(my_users)
	http-request auth realm Authentification if !auth_access
	server plex localhost:32400 check

backend tt-rss
	server ttrss2 localhost:6661 check

 

Lien vers le commentaire
Partager sur d’autres sites

Il manque tous les includes d'apache, en particuliers ceux de des vhosts.

Mais encore une fois, n'utilise pas les vhosts, installe simplement ttrss et configure son accès uniquement via haproxy.

A noter que je n'ai jamais testé le paquet ttrss, je l'installe depuis les sources, le paquet fait peut être des trucs en plus

Lien vers le commentaire
Partager sur d’autres sites

Ok, pas de vhosts, ça me va.

Et tu met quoi comme règle dans haproxy pour faire la redirection ? Chez moi tt-rss est accessible dans le dossier web via le port 80, jusque là sur Haproxy je n'ai fait que des redirections de ports, mais pour ttrss je ne vois pas comment rediriger.

Lien vers le commentaire
Partager sur d’autres sites

Je viens d'installer tout le bazar (mariadb, haproxy et ttrss) pour faire le test.

J'avais oublié que ttrss se servait de l'URL et ne peut donc pas fonctionner (facilement) sur 2 chemins différents (http://tonnas/tt-rss et http://rss.domain.tld/). Au final on va tout de même devoir passer par les vhosts, mais de manière détournée (juste pour changer le port), désolé.

Pour l'exemple, je pars du principe que tu souhaites atteindre ton app avec l'url http://rss.domain.tld et que la résolution DNS de rss.domain.tld renvoi l'ip de ton nas (en local tu peux tricher en modifiant ton fichier hosts).

  1. dans Web Services,  créé une nouvelle instance d'apache sur un port disponible, par exemple sur le port 81
    • Sub-folder Name: le nom du dossier où est installé tt-rss => tt-rss
    • Hostname: peut importe, il faut juste remplir la case => la.tete.a.toto
    • Protocole: HTTP
    • Port: 81
  2. dans HAProxy, créé un backend :
    • Name: ttrss
    • Servers: ttrss localhost:81 check
    • Options: rien
  3. dans HAProxy, créé une association :
    • Frontend: http
    • Backend: ttrss
    • Condition: if { hdr_beg(Host) -i rss. }
  4. si tu ne l'as pas fait durant l'installation modifie la directive SELF_URL_PATH du fichier config.php de tt-rss pour indiquer l'adresse complete
  5. dans ton navigateur, entre l'adresse : http://rss.domain.tld:5080

Chez moi ça fonctionne

 

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.