Jump to content
php.lv forumi

apache rewrite konvertēšana uz nginx


Recommended Posts

Ir saits, kuram jākačā produktu bildes no citiem saitiem un jāsaglabā lokāli. Patreiz uz mana dev box ar apache ir uztaisīts tā: request iet us /images/products/someId/md5hash.jpg

someId = cita saita ID no datubāzes (vienkārši grupēšanai, lai nav 100k+ bilžu vienā folderī)

md5hash - destination file name (reāli hash no oriģinālā attēla url, lai nebūtu tā, ka vairākiem produktiem viena bilde, bet es kačāju un saglabāju katram atsevišķi)

 

Ja šāds fails neeksistē, redirekto uz /images/products/index.php, kurš nokačā oriģinālo image, konvertē un saglabā ar šādu file name.

 

.htaccess saturs /images/products/ mapē:

 

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !index.php
RewriteRule .* ./index.php [L]
 
Viss strādā perfekti - faili kačājās, redirekti notiek, viss super.
 
Bet tagad man tas pats jāpanāk uz nginx, un te sākās problēmas.
 
Mēģināju pavisam vienkārši, tāpat kā apache (izņemot script_filename):
location ~* /images/products/ {
    if (!-f $request_filename) {
        rewrite .* /images/products/index.php;
    }
}

Nestrādā, rewraits nenotiek, met 404, un vistrakākais ir tas, ka piekļūstot index.php vai .htaccess, tie atverās kā plain text!

 

Mēģināju arī "location ~* /images/products/([0-9]+)/([a-zA-Z0-9]+)\.jpg$" un ar vairākiem IFiem:

location ~* /images/products/([0-9]+)/ {
                set $redir 0;
                if (!-f $request_filename)
                {
                        set $redir 1;
                }
                if ($request_filename ~ \.jpg$)
                {
                        set $redir 2$redir;
                }
                if ($redir = 21)
                {
                        rewrite .* /images/products/index.php;
                }
        }
 

Pēdējais mēģinājums, kurš it kā būtu vispareizākais:

 

location ~* /images/products/ {
    try_files $uri /images/products/index.php; // vai vienkārši index.php, nezinu gan, vai tas strādā
}

nekas nestrādā (un jā, es katru reizi izpildīju komandu `service nginx reload`).

 

Dabljū tī ef is this un ko tam endžinam vajag, lai viņam pielektu, ko es gribu?

 

P.S. es domāju, ka tāpat ir skaidri saprotams, ka ar nginx man saskarsme maza un maz rubīju, tāpēc kaut kādus apvainojumus varat uzreiz paturēt pie sevis, labāk nevienam nepaliks.

Edited by jurchiks
Link to comment
Share on other sites

Apmēram šādi?

 

server {
        listen        127.0.0.1:80;
        server_name   page.lv www.page.lv;

        root         /www/page.lv/public;
        location /index.php {
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_param SCRIPT_FILENAME /www/page.lv/public$fastcgi_script_name;
                fastcgi_param PATH_INFO $fastcgi_script_name;
                include /usr/local/nginx/conf/fastcgi_params;
                break;
        }

        location / {
                rewrite ^(.+)$ /index.php$1?$query_string? last;
                break;
        }

        location ~* \.(gif|jpg|png|ico|js|css|jpeg|avi|wmv|exe|txt|mp3|zip|swf|flv|svg)$ {
                if (-f $request_filename) {
                        expires      7d;
                }
        }
}
Link to comment
Share on other sites

Tur nav pilnīgi nekā saistīta ar manu problēmu... Kur ir redirekts uz index.php tieši mapē /images/products/? Man ir vairāki index.php, pārējie strādā normāli, bet tie redirekto unconditionally.

Edited by jurchiks
Link to comment
Share on other sites

@e-remit - tavs tūlis man izmeta šo:

location / {
  if (!-e $request_filename){
    rewrite ^(.*)$ /index.php break;
  }
}

 

nomainīju location uz "/images/products/" un "/index.php" uz "/images/products/index.php" (mēģināju arī vienkārši "index.php" bez slash) - nestrādā.

 

@marrtins - acīmredzot neizlasīji visu tekstu, jo tas .htaccess ir tikai /images/products/ folderim.

Link to comment
Share on other sites

Diemžēl nestrādā, tāpēc jau rakstu šeit. Otrdien uzrakstīju par šo problēmu stackoverflow un līdz šim brīdim nevienas atbildes... Maybe nepareizo saitu izvēlējos, bet parasti moderatori pārvietotu.

Mēģinu visu pēc kārtas, absolūti nekas nestrādā... Galvenais, ka nav nekādas informācijas, kāpēc tieši nestrādā, error logā ir vienīgi "file not found".

Mēģināju noņemt IFu un atstāt pliku redirect - nenotiek, 404.

 

This shit just blows my mind.

Link to comment
Share on other sites

Nespīd, tas ir production serveris ar daudziem citiem saitiem uz tā. + nav mans, es tikai 2 saitus tur činīju.

 

Tikko pamēģināju vēl vienu lietu - 

location ~ /images/products/ {
    rewrite .* /images/products/index.php;
}

 

Pie tam index.php pirmā līnija "die('this happened');".

Izsaucu /images/products/ - 500. erors.

error logā ieraksts - "rewrite or internal redirection cycle while processing "/images/products/index.php".

Noņemu ~ simbolu, reload, izsaucu urli - 403. erors.

WTF? Fails eksistē un permissions ir ok, viņam taču vajag redirektot, vai ne tā?

Edited by jurchiks
Link to comment
Share on other sites

Par vēlu, jau atradu problēmu. Visu čakarēja šis (cits location zem tā, kuru visu laiku mocīju):

location ~ /images/ {
}

 

Noņēmu ~ un viss aizgāja :/ Tāda nervu čakarēšana viena stulba simbola dēļ...

Gala rezultāts:

location /images/ {
}

location /images/products/ {
    try_files $uri /images/products/index.php;
}

 

Un strādā normāli.

Edited by jurchiks
Link to comment
Share on other sites

Jā, tā gadās ar to nginx, ka kāds cits location nograuj. Vispār man baisi netīk tā nginx konfigošana. Tie if ir nedataisīti (to nevar bāzt tu, šito nevar deklarēt te vai izmantot citur), location rulles sarežģītas, izpildes secība arī pēc mistiskiem noteikumiem...

Link to comment
Share on other sites

Sucks, but performance requires sacrifice, I guess.

Man jau arī baigi nepatīk, ka ar nginx nav iespējams visu, izņemot virtual host configu, paturēt saita failos, visi šie rewraiti u.c. maģija obligāti jāliek webservera failos.

Tas, manuprāt, ir vēl lielāks mīnuss nekā šādi location, jo ar šiem tik daudziem nav jāsastopās, bet ar configiem visi čakarējas.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...