nginx is a small HTTP server and a proxy server, what we will use for serve static files and proxy dynamic requests.
addgroup --system www-proxy adduser --disabled-login --shell /bin/false --system --home /var/www --ingroup www-proxy www-proxy grep www-proxy /etc/passwd >>/usr/local/chroot.web/etc/passwd grep www-proxy /etc/group >>/usr/local/chroot.web/etc/group rm /var/www/nginx-default mkdir -p /var/www/var/lib/nginx/body mkdir -p /var/www/var/lib/nginx/fastcgi mkdir -p /var/www/var/lib/nginx/proxy mkdir -p /var/www/var/log/nginx chown www-proxy:www-proxy /var/www/var/log/nginx chmod 0700 /var/www/var/log/nginx rm -r /var/log/nginx ln -s /var/www/var/log/nginx /var/log/nginx
/etc/nginx/nginx.conf
user www-proxy www-proxy;
worker_processes 2;
pid /var/run/nginx.pid;
error_log /var/log/nginx/error.log warn;
events {
worker_connections 160;
}
http {
include /etc/nginx/mime.types;
include /etc/nginx/proxy.conf;
log_format main '$host $remote_addr - $remote_user [$time_local] $status "$request $connection $request_time" $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
client_body_timeout 10;
client_header_timeout 10;
client_body_temp_path /tmp 1 2;
client_body_buffer_size 128k;
client_max_body_size 8m;
default_type text/html;
keepalive_timeout 60;
server_names_hash_bucket_size 64;
sendfile on;
tcp_nopush on;
gzip on;
gzip_min_length 1000;
gzip_types text/html text/css text/xml application/x-javascript;
include /etc/nginx/sites-enabled/*;
}
/etc/nginx/proxy.conf
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; proxy_connect_timeout 60; proxy_send_timeout 60; proxy_read_timeout 60; proxy_buffers 32 4k;
/etc/nginx/deny.conf
location ~ /\.ht {
deny all;
}
location ~ /.+\.(inc|conf|cnf) {
deny all;
}
/etc/nginx/sites_available/default
server {
server_name _ *;
listen <server_ip>:80 default;
access_log /var/log/nginx/access.log main;
root /var/DocRoot/localhost;
index index.html index.php;
location ~ \.php$ {
proxy_pass http://127.0.0.1:80;
}
include /etc/nginx/deny.conf;
}
/etc/nginx/sites_available/default_ssl
server {
server_name _ *;
listen <server_ip>:443 default;
access_log /var/log/nginx/ssl.log main;
root /var/DocRoot/localhost;
index index.html index.php;
location ~ \.php$ {
proxy_pass http://127.0.0.1:443;
}
include /etc/nginx/deny.conf;
ssl on;
ssl_certificate /etc/nginx/ssl/server_cacert.pem;
ssl_certificate_key /etc/nginx/ssl/server_privkey.pem;
}
/etc/nginx/sites_available/first
server {
server_name first www.first;
listen <server_ip>:80;
access_log /var/log/nginx/hosts.access.log main;
location ~* ^/.+\.(ico|css|js|gif|png|xml|rss|txt|swf|avi|mpeg|mpg|wmv)$ {
root /var/DocRoot/$host;
}
include /etc/nginx/deny.conf;
location / {
proxy_pass http://127.0.0.1:80;
}
}
/etc/nginx/sites_available/my_ssl
server {
server_name my.first;
listen <server_ip>:443;
access_log /var/log/nginx/ssl.log main;
root /var/DocRoot/$host;
index index.html index.php;
include /etc/nginx/deny.conf;
location / {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/users.conf;
}
location ~ \.php$ {
proxy_pass http://127.0.0.1:443;
}
ssl on;
ssl_certificate /etc/nginx/ssl/server_cacert.pem;
ssl_certificate_key /etc/nginx/ssl/server_privkey.pem;
location /libraries {
deny all;
}
}
You need some links from /etc/nginx/sites-available to /etc/nginx/sites-enabled.
ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/000-default ln -s /etc/nginx/sites-available/default_ssl /etc/nginx/sites-enabled/000-default_ssl
/etc/init.d/nginx
# (re) init ramdisks
/etc/init.d/rc.local $1
NEW_ROOT=/var/www
case "$1" in
start)
echo -n "Starting $DESC: "
start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \
--exec $DAEMON --chroot $NEW_ROOT -- $DAEMON_OPTS
echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
start-stop-daemon --stop --quiet --pidfile /var/www/var/run/$NAME.pid \
--exec $DAEMON --chroot $NEW_ROOT
echo "$NAME."
;;
restart|force-reload)
echo -n "Restarting $DESC: "
start-stop-daemon --stop --quiet --pidfile \
/var/www/var/run/$NAME.pid --exec $DAEMON --chroot $NEW_ROOT
sleep 1
start-stop-daemon --start --quiet --pidfile \
/var/run/$NAME.pid --exec $DAEMON --chroot $NEW_ROOT -- $DAEMON_OPTS
echo "$NAME."
;;
reload)
echo -n "Reloading $DESC configuration: "
start-stop-daemon --stop --signal HUP --quiet --pidfile /var/www/var/run/$NAME.pid \
--exec $DAEMON --chroot $NEW_ROOT
echo "$NAME."
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
exit 1
;;
esac
/etc/logrotate.d/nginx
postrotate
[ ! -f /var/www/var/run/nginx.pid ] || kill -USR1 `cat /var/www/var/run/nginx.pid`
endscript