nginx только на поддомене

Тема в разделе "BSD", создана пользователем Albert22, 13 авг 2009.

Статус темы:
Закрыта.
  1. Albert22

    Albert22

    Регистр.:
    30 мар 2008
    Сообщения:
    270
    Симпатии:
    10
    Всем привет
    Сервер на FreeBSD, установлены Apache2 и nginx. PHP работает в качестве модуля Apache. Вот конфиг nginx'а (с вмешательством ISP Manager:(
    Код:
    #user  nobody;
    worker_processes  1;
    
    #error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;
    
    #pid        logs/nginx.pid;
    
    
    events {
        worker_connections  1024;
    }
    
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
    
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '    '$status $body_bytes_sent "$http_referer"'    '"$http_user_agent" "$http_x_forwarded_for"';
    
        access_log  /var/log/nginx/nginx.access.log  main;
    
        sendfile        on;
    #    tcp_nopush     on;
    
    #    keepalive_timeout  0;
        keepalive_timeout  65;
    
        gzip  on;
    
    
    
        # another virtual host using mix of IP-, name-, and port-based configuration
    
        server {
            listen ip:80;
            server_name [SIZE=3]domain.tld[/SIZE] *.[SIZE=3]domain.tld[/SIZE];
            rewrite    ^(/manager/.*)$    https://$host$1    permanent;
            location ~* ^/(webstat/|awstats|webmail/|myadmin/|manimg/|ns/*) {
                proxy_pass http://ip:8080;
                proxy_redirect http://[SIZE=3]domain.tld[/SIZE]:8080/ /;
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Real-IP $remote_addr;
            }
            location / {
                proxy_pass http://ip:8080;
                proxy_redirect http://[SIZE=3]domain.tld[/SIZE]:8080/ /;
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Real-IP $remote_addr;
            }
            location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar)$ {
    # мои попытки прописать условие
                if ($host ~* "^(static\.[SIZE=3]domain\.tld[/SIZE])$") {
                    root /home/user/data/www/files;
                    access_log /home/httpd-logs/[SIZE=3]domain.tld[/SIZE].access.log;
    #                error_page 404 = @fallback;
                }
                root /home/user/data/www/files;
            }
            location @fallback {
                proxy_pass http://ip:8080;
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Real-IP $remote_addr;
            }
        }
        client_max_body_size 16m;
    }
    
    В результате всё статическое уходит на nginx, остальное на апач.
    Но возникла необходимость в маскировании mod_rewrite'ом под расширением .jpg динамического скрипта, который выдаёт изображение (чтоб одна ajax-фича понимала что это именно jpeg-изображение). Естественно до того скрипта запрос не доходит поскольку перехватывается nginx'ом и выдаёт «404 Not Found nginx/0.7.61».
    Решил повесить nginx только на поддомен типа static.domain.tld чтобы проверка разширения файла проводилась только там, в остальных случаях безусловно отдавать всё на апач.
    Как это реализовать? Или как прописать условие конкретно для того скрипта чтоб не перехватывался nginx'ом? И какой вариант эффективнее?

    В конфиге уже есть мои попытки написать для этого условие — безрезультатно.
    Заранее спасибо!
     
  2. HOSTER

    HOSTER

    Регистр.:
    22 апр 2008
    Сообщения:
    213
    Симпатии:
    38
    Вы можете напрямую общаться к апачу он работает на порте 8080
    www.example.com:8080
    Или я что то не так понял ???
     
  3. sukaslayer

    sukaslayer Создатель

    Регистр.:
    7 дек 2008
    Сообщения:
    25
    Симпатии:
    2
    А если в конфиг нгинкса добавить строчку

    include /etc/nginx/conf.d/subdomain.conf;


    а в /etc/nginx/conf.d/subdomain.conf соответственно, что-нить вроде

    server {
    listen ip:80;


    server_name subdomain.domain.com;



    location / {
    proxy_pass http://ip:8080/;
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    client_max_body_size 10m;
    client_body_buffer_size 128k;
    proxy_connect_timeout 90;
    proxy_send_timeout 90;
    proxy_read_timeout 90;
    proxy_buffer_size 4k;
    proxy_buffers 4 32k;
    proxy_busy_buffers_size 64k;
    proxy_temp_file_write_size 64k;
    }
    location ~* ^.+.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|wav|bmp|rtf|js)$
    {
    root /home/subdomain.domain.com/public_html/;

    }

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
    root html;
    }



    location ~ /\.ht {
    deny all;
    }
    }
     
Статус темы:
Закрыта.