Jak vyřešit www a non www na apache2

Re:Ako vyriesit www a non www na apache2
« Odpověď #15 kdy: 03. 06. 2018, 14:31:46 »
Pro koncové vlastníky jsou obvykle určené domény druhého řádu – třeba v TLD (top level domain, doména nejvyšší úrovně) sk, cz, com, org atd. Ale jsou i domény, kde je to jinak – třeba v doméně uk se až do roku 2014 registrovaly jen domény 3. úrovně pod doménami co.uk, org.uk a několika dalšími. Pokud nějaká organizace poskytuje další služby zdarma a poskytuje k nim samostatnou doménu, bývá to na doméně třetího řádu, protože tam už můžou své domény vytvářet „zdarma“ – to je případ třeba toho ddns.com, nebo je možné si takhle vytvářet jednoduché webové stránky pod doménou webnode.cz.

www.example.com je doména třetího řádu nebo také hostname. Dříve bylo zvykem takhle rozlišovat typ služby – třeba www.example.com pro web, ftp.example.com pro webový server, pop3.example.com pro poštovní server… Jenže tím, jak internet je hlavně web, pak dlouho dlouho nic a pak další služby, začalo se někomu zdát to www zbytečné a dnes se pro web běžně používá i varianta bez www (a naopak je považováno za chybu, pokud ta varianta neexistuje, alespoň ve formě přesměrování).

Jestli se přesměrovává z www.example.com na example.com nebo opačně je na uvážení majitele webu, kterou variantu si vybere jako základní.

V DNS musí být A záznamy pro oba názvy. Pokud už máte IPv6 adresu, měly by tam být i AAAA záznamy pro IPv6 protokol.

To ServerName a ServerAlias tam není kvůli přesměrování, ale proto, aby Apache věděl, že daná sekce VirtualHost se má použít právě v případě, kdy klient (prohlížeč) požaduje některé z těch jmen. Třeba v tom případě Google by tam ale byly dvě sekce – jedna s google.com, kde by bylo přesměrování, a druhá s www.google.com, kde už by byl samotný obsah. Dá se to spojit i do jedné sekce, ale připadá mi to nepřehledné. Rozdíl mezi ServerName a ServerAlias je v tom, aby server věděl, který název je primární a má ho použít třeba tehdy, když bude generovat chybovou stránku. ServerAlias pak serveru říká, že když bude klient požadovat daná jméno, má se také použít daná sekce, ale není to hlavní jméno toho webu. Dříve se to klidně nechávalo, že jste mohl jít na www.example.com i example.com a zobrazil se stejný obsah, ale nebylo tam přesměrování, dnes už se většinou používá přesměrování, aby jeden obsah měl právě jedno URL. ServerAlias ale sám o sobě přesměrování nezajistí.


Re:Ako vyriesit www a non www na apache2
« Odpověď #16 kdy: 03. 06. 2018, 17:58:38 »
Teraz som z toho trochu zmateny :) ako som spominal, free dns som si vybral changeip.com a tam som si vytvoril domenu.
Podla tohto obrazku je na konkretnu domenu mozne pridat niekolko zaznamov (ako je vidiet z obrazka, tak je mozne pridat zaznamy: A, MX, AAAA, CNAME a URL).
Ja som si len tak zo srandy teraz pridal dalsi A zaznam s nazvom abc a ako hostname tam mam teraz 3 zaznamy
Kód: [Vybrat]
abc.nieco.ddns.info
nieco.ddns.info
www.nieco.ddns.info
samozrejme domeny su vymyslene
Mam to chapat tak, ze 1 a 3 dmona su domeny stvrteho radu a prostredna domena je tretieho radu ?
A ked chcem aby sa mi zobrazovalo to iste pod vsetkymi menami, tak si musim vytvorit konfiguraky pre 3 virtualhosty a v kazdom pouzit iny ServerName a inu cestu pre DocumentRoot a 3 adresare s rovnakym obsahom ?


Re:Ako vyriesit www a non www na apache2
« Odpověď #17 kdy: 03. 06. 2018, 18:14:10 »
Mam to chapat tak, ze 1 a 3 dmona su domeny stvrteho radu a prostredna domena je tretieho radu ?
Ano.

A ked chcem aby sa mi zobrazovalo to iste pod vsetkymi menami, tak si musim vytvorit konfiguraky pre 3 virtualhosty a v kazdom pouzit iny ServerName a inu cestu pre DocumentRoot a 3 adresare s rovnakym obsahom ?
Stačil by jeden adresář a do něj nasměrovat všechny tři DocumentRoot. Na chybových stránkách by se vám pak ukazoval pro každou doménu správný název serveru. Nebo byste mohl všechny tři domény dát do jednoho virtualhostu, jeden název zvolit jako hlavní a použít pro ServerName a zbylé dva dát do ServerAlias. Pak by se na chybových stránkách zobrazovalo všude to ServerName. Ale také byste mohl ty chybové stránky upravit, aby se pro výpis názvu serveru nepoužívala proměnná SERVER_NAME ale HTTP_HOST, a pak by se zase na chybových stránkách zobrazoval název serveru odpovídající požadované doméně. Pokud tedy klient pošle správnou hlavičku (což dnes všechna prohlížeče dělají). Ono se to historicky různě vyvíjelo, takže dnes existuje třeba víc postupů, jak dosáhnout téhož, přičemž se ty postupy liší v nějakých okrajových případech.

Každopádně mít stejný obsah na více doménách by bylo matoucí pro uživatele i pro vyhledávače, takže bych se snažil tomu vyhnout. Obsah (DocumentRoot) bych dal na jednu doménu (jeden virtual host), a z těch zbývajících domén bych udělal přesměrování (druhý virtualhost).

Kód: [Vybrat]
<VirtualHost *:80>
    ServerName nieco.ddns.info
    ServerAlias abc.nieco.ddns.info

    RewriteEngine on
    RewriteRule ^(.*)$ http://www.nieco.ddns.info$1 [R=301,NE,L]
</VirtualHost>

<VirtualHost *:80>
    ServerName www.nieco.ddns.info

    DocumentRoot /var/www/www.nieco.ddns.info
</VirtualHost>

Re:Jak vyřešit www a non www na apache2
« Odpověď #18 kdy: 04. 06. 2018, 22:11:55 »
Nasiel som tento clanok a podla toho to aj celkom dobre funguje.
Napr. pre web1.ddns.com.
V DNS musia byt A zanamy pre web1.ddns.com aj www.web1.ddns.com.
Ak zadam do url jednu z moznosti
Kód: [Vybrat]
web1.ddns.com
www.web1.ddns.com
http://web1.ddns.com
https://web1.ddns.com
https://www.web1.ddns.com
Tak to vzdy nasmeruje na
Kód: [Vybrat]
https://www.web1.ddns.comKonfigurak vyzera nasledovne
Kód: [Vybrat]
<VirtualHost *:80>
ServerName web1.ddns.com
ServerAlias www.web1.ddns.com
RewriteEngine on
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [L,NE,R=301]
</VirtualHost>
<VirtualHost *:443>
ServerName web1.ddns.com
ServerAlias www.web1.ddns.com
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/web1.ddns.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/web1.ddns.com/privkey.pem
DocumentRoot /var/www/www.web1.ddns.com

  <IfModule mod_headers.c>
        Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"
    </IfModule>
</VirtualHost>
Sice regexpom velmi nerozumiem, ale asi to bude OK, kedze to funguje :)
Certikat a kluc musia mat spravne cesty a taktiez documentroot.
Dakujem vsetkym za cenne rady

MP

Re:Jak vyřešit www a non www na apache2
« Odpověď #19 kdy: 04. 06. 2018, 23:52:54 »
Nasiel som tento clanok a podla toho to aj celkom dobre funguje.
Napr. pre web1.ddns.com.
V DNS musia byt A zanamy pre web1.ddns.com aj www.web1.ddns.com.
Ak zadam do url jednu z moznosti
Kód: [Vybrat]
web1.ddns.com
www.web1.ddns.com
http://web1.ddns.com
https://web1.ddns.com
https://www.web1.ddns.com
Tak to vzdy nasmeruje na
Kód: [Vybrat]
https://www.web1.ddns.comKonfigurak vyzera nasledovne
Kód: [Vybrat]
<VirtualHost *:80>
ServerName web1.ddns.com
ServerAlias www.web1.ddns.com
RewriteEngine on
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [L,NE,R=301]
</VirtualHost>
<VirtualHost *:443>
ServerName web1.ddns.com
ServerAlias www.web1.ddns.com
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/web1.ddns.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/web1.ddns.com/privkey.pem
DocumentRoot /var/www/www.web1.ddns.com

  <IfModule mod_headers.c>
        Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"
    </IfModule>
</VirtualHost>
Sice regexpom velmi nerozumiem, ale asi to bude OK, kedze to funguje :)
Certikat a kluc musia mat spravne cesty a taktiez documentroot.
Dakujem vsetkym za cenne rady

Neni pravda, nepresmeruje to https://web1.ddns.com. Zlaty nginx, kdyz vidim takovyhle bordel (a to stale provozuju apache v produkci).


Re:Jak vyřešit www a non www na apache2
« Odpověď #20 kdy: 05. 06. 2018, 05:00:54 »
Mas pravdu ... to som neskusal  :) a fakt to nejde  :-[

Vilith

  • *****
  • 660
    • Zobrazit profil
Re:Jak vyřešit www a non www na apache2
« Odpověď #21 kdy: 05. 06. 2018, 06:13:49 »
Vyzkousej:

Kód: [Vybrat]
<VirtualHost *:80>
                DocumentRoot /var/www/web1.ddns.com/web

                ServerName web1.ddns.com
                ServerAlias www.web1.ddns.com
                ServerAdmin webmaster@web1.ddns.com

                RewriteEngine on
                RewriteCond %{HTTP_HOST} ^web1\.ddns\.com$ [NC]
                RewriteRule ^(.*)$ http://www.web1.ddns.com$1 [R=301,NE,L]
RewriteCond %{HTTPS} off
                RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NE]
</VirtualHost>


<VirtualHost *:443>
                DocumentRoot /var/www/web1.ddns.com/web

                ServerName web1.ddns.com
                ServerAlias www.web1.ddns.com
                ServerAdmin webmaster@web1.ddns.com

                <IfModule mod_ssl.c>
SSLEngine on
SSLCertificateFile /var/www/clients/client2/web15/ssl/web1.ddns.com.crt
SSLCertificateKeyFile /var/www/clients/client2/web15/ssl/web1.ddns.com.key
                </IfModule>

                RewriteEngine on
                RewriteCond %{HTTP_HOST} ^web1\.ddns\.com$ [NC]
                RewriteRule ^(.*)$ https://www.web1.ddns.com$1 [R=301,NE,L]
</VirtualHost>


Vilith

  • *****
  • 660
    • Zobrazit profil
Re:Jak vyřešit www a non www na apache2
« Odpověď #22 kdy: 05. 06. 2018, 06:25:00 »
A druhy web co redirectuje na web1

Kód: [Vybrat]
<VirtualHost *:80>
DocumentRoot /var/www/web2.ddns.com/web

                ServerName web2.ddns.com
                ServerAlias www.web2.ddns.com
                ServerAdmin webmaster@web2.ddns.com

                ErrorLog /var/log/ispconfig/httpd/web2.ddns.com/error.log

                RewriteEngine on
                RewriteCond %{HTTP_HOST}   ^web2\.ddns\.com$ [NC]
                RewriteRule   ^/(.*)$ https://www.web1.ddns.com  [R=301,L]
                RewriteCond %{HTTP_HOST}   ^www\.web2\.ddns\.com$ [NC]
                RewriteRule   ^/(.*)$ https://www.web1.ddns.com  [R=301,L]
</VirtualHost>

<VirtualHost *:443>
DocumentRoot /var/www/web2.ddns.com/web

                ServerName web2.ddns.com
                ServerAlias www.web2.ddns.com
                ServerAdmin webmaster@web2.ddns.com

                ErrorLog /var/log/ispconfig/httpd/web2.ddns.com/error.log

                <IfModule mod_ssl.c>
SSLEngine on
SSLCertificateFile /var/www/clients/client2/web16/ssl/*.web2.ddns.com.crt
SSLCertificateKeyFile /var/www/clients/client2/web16/ssl/*.web2.ddns.com.key
                </IfModule>

                RewriteEngine on
                RewriteCond %{HTTP_HOST}   ^web2\.ddns\.com$ [NC]
                RewriteRule   ^/(.*)$ https://www.web1.ddns.com  [R=301,L]
                RewriteCond %{HTTP_HOST}   ^www\.web2\.ddns\.com$ [NC]
                RewriteRule   ^/(.*)$ https://www.web1.ddns.com  [R=301,L]
</VirtualHost>

Snad je to OK, vyzkousej

darebacikzprace

Re:Jak vyřešit www a non www na apache2
« Odpověď #23 kdy: 05. 06. 2018, 10:17:54 »
Neni pravda, nepresmeruje to https://web1.ddns.com. Zlaty nginx, kdyz vidim takovyhle bordel (a to stale provozuju apache v produkci).
Ja sa nebranim ani nginixu .... ale co .... apache je naraz zly ?

Vilith

  • *****
  • 660
    • Zobrazit profil
Re:Jak vyřešit www a non www na apache2
« Odpověď #24 kdy: 05. 06. 2018, 10:19:52 »
Nevim v cem by zapis v nginxu byl tak diametralne odlisny. Mozna by nam ho mohl ukazat...

MP

Re:Jak vyřešit www a non www na apache2
« Odpověď #25 kdy: 05. 06. 2018, 10:49:08 »
Metoda bez "if"
Kód: [Vybrat]
server {
        listen 80;
        listen [::]:80;
        server_name web1.ddns.com www.web1.ddns.com;
        return 301 https://www.web1.ddns.com$request_uri;
        }

server {
        listen 443 ssl;
        listen [::]:443 ssl;
        server_name web1.ddns.com;
        ssl_certificate /etc/letsencrypt/live/web1.ddns.com/cert.pem
        ssl_certificate_key /etc/letsencrypt/live/web1.ddns.com/privkey.pem
        return 301 https://www.web1.ddns.com$request_uri;
        }

server {
        listen 443 ssl;
        listen [::]:443 ssl;
        server_name www.web1.ddns.com;
        ssl_certificate /etc/letsencrypt/live/web1.ddns.com/cert.pem
        ssl_certificate_key /etc/letsencrypt/live/web1.ddns.com/privkey.pem
root /var/www/web1.ddns.com
        access_log /var/log/nginx/access.log main;
        error_log /var/log/nginx/error.log;

...zbytek konfigurace...

        }

Srovnat to s temi RewriteRule/RewriteCond...

Re:Jak vyřešit www a non www na apache2
« Odpověď #26 kdy: 05. 06. 2018, 11:41:36 »
Srovnat to s temi RewriteRule/RewriteCond...
Jenže ty RewriteCond jsou tam nesmyslné. Konfigurace Apache může být úplně stejná, jako vaše konfigurace nginxu, nahradil by se řádek za řádek.

Re:Jak vyřešit www a non www na apache2
« Odpověď #27 kdy: 05. 06. 2018, 15:15:15 »
Vyzkousej:

Kód: [Vybrat]
<VirtualHost *:80>
                DocumentRoot /var/www/web1.ddns.com/web

                ServerName web1.ddns.com
                ServerAlias www.web1.ddns.com
                ServerAdmin webmaster@web1.ddns.com

                RewriteEngine on
                RewriteCond %{HTTP_HOST} ^web1\.ddns\.com$ [NC]
                RewriteRule ^(.*)$ http://www.web1.ddns.com$1 [R=301,NE,L]
RewriteCond %{HTTPS} off
                RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NE]
</VirtualHost>


<VirtualHost *:443>
                DocumentRoot /var/www/web1.ddns.com/web

                ServerName web1.ddns.com
                ServerAlias www.web1.ddns.com
                ServerAdmin webmaster@web1.ddns.com

                <IfModule mod_ssl.c>
SSLEngine on
SSLCertificateFile /var/www/clients/client2/web15/ssl/web1.ddns.com.crt
SSLCertificateKeyFile /var/www/clients/client2/web15/ssl/web1.ddns.com.key
                </IfModule>

                RewriteEngine on
                RewriteCond %{HTTP_HOST} ^web1\.ddns\.com$ [NC]
                RewriteRule ^(.*)$ https://www.web1.ddns.com$1 [R=301,NE,L]
</VirtualHost>

Toto funguje OK.
A druhy web co redirectuje na web1

Kód: [Vybrat]
<VirtualHost *:80>
DocumentRoot /var/www/web2.ddns.com/web

                ServerName web2.ddns.com
                ServerAlias www.web2.ddns.com
                ServerAdmin webmaster@web2.ddns.com

                ErrorLog /var/log/ispconfig/httpd/web2.ddns.com/error.log

                RewriteEngine on
                RewriteCond %{HTTP_HOST}   ^web2\.ddns\.com$ [NC]
                RewriteRule   ^/(.*)$ https://www.web1.ddns.com  [R=301,L]
                RewriteCond %{HTTP_HOST}   ^www\.web2\.ddns\.com$ [NC]
                RewriteRule   ^/(.*)$ https://www.web1.ddns.com  [R=301,L]
</VirtualHost>

<VirtualHost *:443>
DocumentRoot /var/www/web2.ddns.com/web

                ServerName web2.ddns.com
                ServerAlias www.web2.ddns.com
                ServerAdmin webmaster@web2.ddns.com

                ErrorLog /var/log/ispconfig/httpd/web2.ddns.com/error.log

                <IfModule mod_ssl.c>
SSLEngine on
SSLCertificateFile /var/www/clients/client2/web16/ssl/*.web2.ddns.com.crt
SSLCertificateKeyFile /var/www/clients/client2/web16/ssl/*.web2.ddns.com.key
                </IfModule>

                RewriteEngine on
                RewriteCond %{HTTP_HOST}   ^web2\.ddns\.com$ [NC]
                RewriteRule   ^/(.*)$ https://www.web1.ddns.com  [R=301,L]
                RewriteCond %{HTTP_HOST}   ^www\.web2\.ddns\.com$ [NC]
                RewriteRule   ^/(.*)$ https://www.web1.ddns.com  [R=301,L]
</VirtualHost>

Snad je to OK, vyzkousej
Ale ja som nechcel smerovat z web2 na web1
Ten prvy konfig je uplne OK

OT ale chcel by som skusit aj nginix  :)

Vilith

  • *****
  • 660
    • Zobrazit profil
Re:Jak vyřešit www a non www na apache2
« Odpověď #28 kdy: 05. 06. 2018, 17:15:52 »
Pro vetsinu veci byva jedno zda apache nebo nginx, ale jsou situace, kdy aplikace vyzaduje Apache a donutit ke stejne funkcionalite nginx neni az tak snadne.

Nginx ma zase sve vyhody.

Casto se nginx pouziva jako frontend k backendu apache nebo jineho weboveho serveru

Kazdy ma svoje vyhody a nevyhody, zatracovat jeden a druhy vychvalovat si netroufam