[nginx] Konfiguracja virtual host

Konfiguracja serwerów, usług, itp.
Areh
Posty: 39
Rejestracja: 09 października 2013, 10:35

[nginx] Konfiguracja virtual host

Post autor: Areh »

Witam ponownie.
Znowu dostałem zadanie które mnie przerasta, bo z serwerami www itp. nigdy nie miałem do czynienia.
Wygląda to tak: na serwerze jest kilka aplikacja javowych, działa to na Glassfishu. Za serwer robi nginx. Zadanie wygląda tak: mam zrobić tak, żeby do jednej z tych aplikacji był dodatkowy dostęp przez www, ale żeby w tym wypadku wczytywane były inne css'y i pliki graficzne, które będą w innym katalogu/katalogach (do których te rzeczy będą wrzucać front-end developerzy w celu testowania).
Od której strony za to się zabrać, jakie informacje jeszcze podać?
Awatar użytkownika
lessmian2
Member
Posty: 1088
Rejestracja: 30 kwietnia 2008, 19:38
Lokalizacja: Kraków

Post autor: lessmian2 »

Zazwyczaj w aplikacjach webowych, wszystkie css'y, grafiki itp. są w wydzielonym katalogu od reszty (np. skryptów php). Przykładowo:
/moja_aplikacja/images/
/moja_aplikacja/css/
/moja_aplikacja/core_app/

W nginxie robisz dodatkowego VHosta który wskazuje na katalog /mojaplikacja i jest identycznie skonfigurowany jak ten już działający (no może poza domeną i/lub portem ;) , ale dla katalogów z css'ami i grafikami robisz alias który będzie wskazywał na inny katalog, do którego web deweloperzy będą mogli wrzucać pliki.

http://wiki.nginx.org/HttpCoreModule#alias
Areh
Posty: 39
Rejestracja: 09 października 2013, 10:35

Post autor: Areh »

No ok. Znalazłem potrzebne katalogi (css i images), skopiowałem w miejsce gdzie upoważnione osoby będą mogły je modyfikować. Problem ma tylko z tym wirtualnym hostem.
Teraz /etc/nginx/conf.d/default.conf wygląda tak:

Kod: Zaznacz cały

upstream app1{
        ip_hash;
        server 10.88.56.223:6113;
        server 10.88.56.223:6114;
    }

upstream app2 {
        ip_hash;
        server 10.88.56.223:6111;
        server 10.88.56.223:6112;
    }

server {
    client_max_body_size 50M;
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}
    location /app1 {
        proxy_pass http://app1;
        proxy_set_header        X-Real-IP $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header        Host $http_host;
        proxy_connect_timeout 240;
        proxy_read_timeout 240;
        proxy_send_timeout 240;
    }

    location /app2 {
        proxy_pass http://app2;
        proxy_set_header        X-Real-IP $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header        Host $http_host;
    }

    location /app3 {
        proxy_pass http://10.88.56.223:30090/app3;
    }

   location /app4 {
        proxy_pass http://10.88.56.223:9081/app4;
    }


    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}
No i w ten sposób wszystko ładnie działa. Teraz chcę zrobić tak jak mówisz (chodzi mi o app1), czyli dodaje:

Kod: Zaznacz cały

upstream app1_test {
        ip_hash;
        server 10.88.56.233:6113;
    }
oraz

Kod: Zaznacz cały

    location /load {
        proxy_pass http://app1_test;
        proxy_set_header        X-Real-IP $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header        Host $http_host;
        proxy_connect_timeout 240;
        proxy_read_timeout 240;
        proxy_send_timeout 240;
    }
Ale przy /etc/init.d/nginx configtest wywala:

Kod: Zaznacz cały

nginx: [emerg] duplicate location "/app1" in /etc/nginx/conf.d/default.conf:55
nginx: configuration file /etc/nginx/nginx.conf test failed
Tak, ja wiem że to jest zduplikowane, ale ma być. Na razie chciałbym żeby po wpisaniu adresu app1_test wyświetlało mi się dokładnie to samo co po wpisaniu app1, a podmianą css'ów i reszty zajmę się jak już to ruszy, tylko najpierw niech to ruszy.
Awatar użytkownika
lessmian2
Member
Posty: 1088
Rejestracja: 30 kwietnia 2008, 19:38
Lokalizacja: Kraków

Post autor: lessmian2 »

Ale po co te upstream'y ruszasz? Ja napisałem, żebyś dodał location dla kilku katalogów. Backendy zostaw w spokoju (oba VHosty mogą korzystać z tych samych). Na moje oko (ale oczywiście trzeba przetestować), to wystarczy skopiować całą sekcję server, zmienić tylko listen/server_name i dodać dwa aliasy dla katalogów css i images.
Areh
Posty: 39
Rejestracja: 09 października 2013, 10:35

Post autor: Areh »

Jak pisałem w pierwszym poście - nie mam o tym zielonego pojęcia.
Ja napisałem, żebyś dodał location dla kilku katalogów
Tego nie rozumiem.
to wystarczy skopiować całą sekcję server, zmienić tylko listen/server_name
No ok. listen powiedzmy że na 81, ale server_name? Localhost to dla mnie localhost. Mogę to dowolnie sobie zmienić?
Wiem że moje pytania są dla Was śmieszne i głupie, ale po prostu zielony jestem.
Awatar użytkownika
lessmian2
Member
Posty: 1088
Rejestracja: 30 kwietnia 2008, 19:38
Lokalizacja: Kraków

Post autor: lessmian2 »

Jeśli jako server_name wpiszesz foo i w przeglądarce jako adres również wpiszesz foo (przy założeniu, że foo rozwiązuje się na adres IP serwera - np. przez wpis w /etc/hosts) to zadziała tak jak i localhost. W uproszczeniu, ta dyrektywa określa pod jakimi nazwami/domenami dany VHost będzie działał.
ODPOWIEDZ