<div dir="ltr"><div><div class="gmail_signature"><div dir="ltr"><div><span style="font-size:12.8px">Question on SF: <a href="https://serverfault.com/questions/874730/convert-apache-mod-proxy-p-to-nginx-equivalent">https://serverfault.com/questions/874730/convert-apache-mod-proxy-p-to-nginx-equivalent</a></span><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">My PHP MVC platform CodeIgniter performs routing based on the REQUEST_URI.</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px"><div>In Apache, you cannot change the REQUEST_URI environment variable. So, in Apache, I made use of the [P]proxy flag. Sending the rewritten URL using mod_proxy took care of that and it just works. The browser does not redirect and the information is returned.</div><div><br></div><div>How do I do the same in Nginx? Or is there a way to change the REQUEST_URI without proxy?</div><div><br></div><div>The <b>APACHE DIRECTIVES</b> take a URL like: </div><div><br></div><div><a href="https://www.example.com/_img/h_32/w_36/test.jpg" target="_blank">https://www.example.com/_img/h<wbr>_32/w_36/test.jpg</a> </div><div><br></div><div>and converts it to </div><div><br></div><div><a href="https://www.example.com/img/i/_img/h_32/w_36/test.jpg" target="_blank">https://www.example.com/img/i/<wbr>_img/h_32/w_36/test.jpg</a>.</div><div><br></div><div>Then once rewritten, it sends the request using mod_proxy and RewriteCond makes sure to not call RewriteRule again if the URL has /img/i in it. Thus avoiding the loop of death.</div><div><br></div><div><b>APACHE DIRECTIVES</b></div><div><br></div><div>    RewriteCond %{REQUEST_URI} (h|w|fm|trim|fit|pad|border|or<wbr>|bg)_</div><div>    RewriteCond %{REQUEST_URI} !^(.*)/img/i/</div><div>    RewriteRule "(.*)\.(jpg|png)$" /index.php/img/i/$1.$2 [P]</div><div><br></div><div><b>NGINX DIRECTIVES SO FAR</b>: You can see in <b>BLOCK 1</b> the regex to match and a possible rewrite. Where do I go next?</div><div><br></div><div>    root /var/www/vhosts/<a href="http://example.com/htdocs" target="_blank">example.com/ht<wbr>docs</a>;</div><div>    index index.php index.html;</div><div>    </div><div>    # <b>BLOCK 1</b></div><div>    location ~* \/(h|w|fm|trim|fit|pad|border|<wbr>or|bg)_.*\.(jpg|png)$ {</div><div>    <span style="white-space:pre-wrap">       </span>    #rewrite "(.*)\.(jpg|png)$" index.php/img/i$1.$2; #doesn't change the REQUEST_URI</div><div>            #do I do proxy pass here? </div><div>            #How do I avoid the regex matching again?</div><div>    }</div><div>    </div><div>    location / {</div><div>    <span style="white-space:pre-wrap">  </span>   try_files $uri $uri/ /index.php$uri?$args;</div><div>    }</div><div>    </div><div>    location ~ ^(.+\.php)(.*)$ {</div><div>    <span style="white-space:pre-wrap">              </span>fastcgi_pass   <a href="http://127.0.0.1:9000/" target="_blank">127.0.0.1:9000</a>;</div><div>    <span style="white-space:pre-wrap">             </span>fastcgi_param  CI_ENV production; #CI environment constant</div><div>    <span style="white-space:pre-wrap">               </span>fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script<wbr>_name;</div><div>    <span style="white-space:pre-wrap">          </span>include fastcgi_params;</div><div>    }</div></div></div></div></div></div>
</div>