Hello,
When a request comes to the server i want to check if the $remote_addr
is in my list of addresses, if it is then serve the normal content if
not, then serve a static page.
I tried something like this but it doesn’t seem to work.
server {
listen 80;
server_name .app-domain.com;
error_log /var/log/nginx/app-error.log;
root /disk0/vhosts/app/public;
charset utf-8;
fastcgi_index index.php;
location / {
if ($remote_addr !~ (x.x.x.x|z.z.z.z|y.y.y.y)) {
root /disk0/vhosts/blank;
break;
}
try_files $uri $uri/ @fallback;
fastcgi_pass apps;
fastcgi_param SCRIPT_FILENAME
$document_root$fastcgi_script_name;
include fastcgi_params;
}
location @fallback {
fastcgi_pass apps;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
include fastcgi_params;
}
}
Hello!
On Thu, Sep 10, 2009 at 06:42:03PM +0200, Tomasz P. wrote:
error_log /var/log/nginx/app-error.log;
}
try_files $uri $uri/ @fallback;
fastcgi_pass apps;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
This won’t work as fastcgi_pass will be inherited into if(). You
should use internal redirect instead. Also it’s a good idea to
use geo module for ip checks. So something like this should
work:
geo $static {
default 0;
x.x.x.x/32 1;
y.y.y.y/32 1;
z.z.z.z/32 1;
}
server {
...
location / {
if ($static) {
rewrite ^ /static/ last;
}
...
}
location /static/ {
internal;
alias /disk0/vhosts/blank/;
}
...
}
Maxim D.
On Thu, Sep 10, 2009 at 06:42:03PM +0200, Tomasz P. wrote:
error_log /var/log/nginx/app-error.log;
}
include fastcgi_params;
}
}
Try the following configuration:
http {
geo $forbidden {
default 1;
x.x.x.x 0;
z.z.z.z 0;
...
}
server {
error_page 403 = /blank.html;
location / {
if ($forbidden) {
return 403;
}
try_files $uri $uri/ @fallback;
fastcgi_pass apps;
fastcgi_param SCRIPT_FILENAME
$document_root$fastcgi_script_name;
include fastcgi_params;
}
location = /blank.html {
root /disk0/vhosts;
}
}