赶上要配置测试服务器,赶上
Nginx-1.2.0 stable version
释放,正好重新配置一下Nginx!
相关内容:
征服 Apache + SSL
征服 Apache + SVN
征服 Apache + SVN + LDAP
征服 Apache + Tomcat
征服 Nginx
征服 Nginx + Tomcat
一、准备工作
下载如下组件:
pcre,有关正则表达式匹配;zlib,用于压缩。这些就不细说了,如果要安装最简版的nginx,记得准备好这两样东西就好了。
用root账户启动服务是比较危险的! 前段时间,测试服务器被黑掉了,终归到底是通过一个root启动的服务上传了木马,最后连ssh都屏蔽了,活生生成为一台肉鸡。。。
所以,惨痛的经验告诉我,一定要为服务建立对应的组和用户,限制访问权限,降低风险!
这里为nginx建立一个www组,并建立一个不登录的账户nginx:
建立一个目录用于存放nginx日志文件,并赋予相应权限:
二、编译安装
我把pcre、zlib、nginx的压缩包都放在了 /opt/software 路径下,服务要装在 /opt/servers 路径下。
先对pcre、zlib、nginx解压,然后编译安装:
三、系统配置
我希望nginx可以作为一个服务,通过service命令启动或停止。
这样做的好处是,不论我用什么用户调用这个service命令,都不会因为使用错误的账户带来安全问题。
建立一个系统文件:
前人栽树,后人乘凉。已经有老鸟做好了启动配置文件:
注意,这里的路径:
如果你的nginx安装路径在其它位置,请对应修改!
然后赋予这个文件执行权限:
追加为系统服务:
现在就可以使用,如下命令控制nginx服务了!
三、vim语法支持
vim对于nginx配置文件的支持不那么友好,无法对关键字高亮显示。
不过,没关系。我们可以通过修改 ~/.vim 配置,增强vim功能。
参考 vim for nginx 配置VIM语法高亮及自动缩进
可能你的用户目录下并没有 .vim 这个目录,需要自行建立。
建立针对nginx的配置文件,这里的nginx配置文件的路径是 /opt/servers/nginx/conf ,注意对应修改:
最后,请出主角(下载的是本文的附件 ):
这样就ok了!
四、基本配置
完成上述工作后,nginx还不能急于投入使用,需要做一些基本配置与优化工作。
修改nginx配置文件:
微调
#使用的用户和组,这里我们为nginx服务新建了nginx账户和www工作组
user nginx www;
#制定的工作衍生进程数(2倍于CPU内核数)
worker_processes 4;
#错误日志存放路径,日志级别由低到高[debug | info | notice | warn | error | crit]
error_log /var/log/nginx/error.log crit;
#指定文件描述符数量 与ulimit -n数值保持一致
work_rlimit_nofile 65535;
events {
#使用的网络I/O模型,Linux用epoll模型,Unix用kqueue模型
use epoll;
#允许的连接数
worker_connections 51200;
}
http{
include mime.types;
default_type application/octet-stream;
#追加 '"$sent_http_cache_control" "$sent_http_pl" "$request_time"'获取请求细节信息
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'
'"$sent_http_cache_control""$sent_http_pl" "$request_time"';
access_log /var/log/nginx/access.log main;
...
server{
...
location / {
root html;
index index.html index.htm index.jsp index.do;
#在header中传递请求放host、ip等信息
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_pass_header Content-Type;
proxy_pass_header Content-Disposition;
proxy_pass_header Content-Length;
...
}
}
}
五、虚拟目录
nginx配置虚拟目录很简单,主要是运用root、alias两个指令。
以访问图片服务为例:
root,用于相对路径
location /image/ {
root /data;
}
当我们访问“/image/”路径时,实际上访问的是“/data/image/”,注意“/data”后面不要有“/”
alias,用于绝对路径
location /image/ {
alias /data/img/;
}
当我们访问“/image/”路径时,实际上访问的是“/data/img/”,注意“/data/img/”以“/”结尾。
六、重定向
有时候链接不加考虑就放出去了,突然哪天需要调整,又不能及时撤回已放出的链接地址。只好自己修改nginx配置。
譬如,放出去的链接:/activity.do?m=v 想让它指到/路径上:
想要把请求来的参数也带上:
$1 指得是第一个参数,以此类推。
六、监控
Active connections: 14
server accepts handled requests
62 62 302
Reading: 0 Writing: 3 Waiting: 11
七、日志分割
赋予执行权限
凌晨执行
相关内容:
征服 Apache + SSL
征服 Apache + SVN
征服 Apache + SVN + LDAP
征服 Apache + Tomcat
征服 Nginx
征服 Nginx + Tomcat
[url=http://code.google.com/p/nginx-auth-ldap/downloads/detail?name=ngx_http_auth_ldap_module-1.0-a3.tar.gz&can=1&q=][/url]
相关内容:
征服 Apache + SSL
征服 Apache + SVN
征服 Apache + SVN + LDAP
征服 Apache + Tomcat
征服 Nginx
征服 Nginx + Tomcat
一、准备工作
下载如下组件:
pcre,有关正则表达式匹配;zlib,用于压缩。这些就不细说了,如果要安装最简版的nginx,记得准备好这两样东西就好了。
用root账户启动服务是比较危险的! 前段时间,测试服务器被黑掉了,终归到底是通过一个root启动的服务上传了木马,最后连ssh都屏蔽了,活生生成为一台肉鸡。。。
所以,惨痛的经验告诉我,一定要为服务建立对应的组和用户,限制访问权限,降低风险!
这里为nginx建立一个www组,并建立一个不登录的账户nginx:
- #追加一个www组
- groupadd -f www
- #追加一个nginx用户
- useradd -s /sbin/nologin -g www nginx
建立一个目录用于存放nginx日志文件,并赋予相应权限:
- #建立nginx日志目录
- mkdir /var/log/nginx
- #赋予访问权限
- chown nginx.www /var/log/nginx
二、编译安装
我把pcre、zlib、nginx的压缩包都放在了 /opt/software 路径下,服务要装在 /opt/servers 路径下。
先对pcre、zlib、nginx解压,然后编译安装:
- ./configure --prefix=/opt/servers/nginx \
- --user=nginx \
- --group=www \
- --pid-path=/var/run/nginx.pid \
- --error-log-path=/var/log/nginx/error.log \
- --http-log-path=/var/log/nginx/access.log \
- --with-pcre=/opt/software/pcre-8.10 \
- --with-zlib=/opt/software/zlib-1.2.5 \
- --with-http_stub_status_module \
- --with-http_realip_module \
- --with-http_gzip_static_module \
- --without-http_fastcgi_module \
- --without-http_memcached_module \
- --without-http_map_module \
- --without-http_geo_module \
- --without-http_autoindex_module \
- --with-poll_module
- && make && make install
三、系统配置
我希望nginx可以作为一个服务,通过service命令启动或停止。
这样做的好处是,不论我用什么用户调用这个service命令,都不会因为使用错误的账户带来安全问题。
建立一个系统文件:
- vim /etc/init.d/nginx
前人栽树,后人乘凉。已经有老鸟做好了启动配置文件:
- #!/bin/bash
- # v.0.0.1
- # create by jackbillow at 2007.10.15
- # nginx - This shell script takes care of starting and stopping nginx.
- #
- # chkconfig: - 60 50
- # description: nginx [engine x] is light http web/proxy server
- # that answers incoming ftp service requests.
- # processname: nginx
- # config: /etc/nginx.conf
- nginx_path="/opt/servers/nginx"
- nginx_pid="/var/run/nginx.pid"
- # Source function library.
- . /etc/rc.d/init.d/functions
- # Source networking configuration.
- . /etc/sysconfig/network
- # Check that networking is up.
- [ ${NETWORKING} = "no" ] && exit 0
- [ -x $nginx_path/sbin/nginx ] || exit 0
- RETVAL=0
- prog="nginx"
- start() {
- # Start daemons.
- if [ -e $nginx_pid -a ! -z $nginx_pid ];then
- echo "nginx already running...."
- exit 1
- fi
- if [ -e $nginx_path/conf/nginx.conf ];then
- echo -n $"Starting $prog: "
- $nginx_path/sbin/nginx -c $nginx_path/conf/nginx.conf &
- RETVAL=$?
- [ $RETVAL -eq 0 ] && {
- touch /var/lock/subsys/$prog
- success $"$prog"
- }
- echo
- else
- RETVAL=1
- fi
- return $RETVAL
- }
- # Stop daemons.
- stop() {
- echo -n $"Stopping $prog: "
- killproc -d 10 $nigx_path/sbin/nginx
- RETVAL=$?
- echo
- [ $RETVAL = 0 ] && rm -f $nginx_pid /var/lock/subsys/$prog
- }
- # See how we were called.
- case "$1" in
- start)
- start
- ;;
- stop)
- stop
- ;;
- restart)
- stop
- start
- ;;
- status)
- status $prog
- RETVAL=$?
- ;;
- *)
- echo $"Usage: $0 {start|stop|restart|status}"
- exit 1
- esac
- exit $RETVAL
注意,这里的路径:
引用
nginx_path="/opt/servers/nginx"
nginx_pid="/var/run/nginx.pid"
nginx_pid="/var/run/nginx.pid"
如果你的nginx安装路径在其它位置,请对应修改!
然后赋予这个文件执行权限:
- chmod +x /etc/init.d/nginx
追加为系统服务:
- chkconfig --add nginx
- chkconfig nginx on
现在就可以使用,如下命令控制nginx服务了!
引用
#启动nginx
service nginx start
#停止nginx
service nginx stop
#重启nginx
service nginx restart
#查看nginx状态
service nginx status
service nginx start
#停止nginx
service nginx stop
#重启nginx
service nginx restart
#查看nginx状态
service nginx status
三、vim语法支持
vim对于nginx配置文件的支持不那么友好,无法对关键字高亮显示。
不过,没关系。我们可以通过修改 ~/.vim 配置,增强vim功能。
参考 vim for nginx 配置VIM语法高亮及自动缩进
可能你的用户目录下并没有 .vim 这个目录,需要自行建立。
- mkdir ~/.vim
- mkdir ~/.vim/syntax
建立针对nginx的配置文件,这里的nginx配置文件的路径是 /opt/servers/nginx/conf ,注意对应修改:
- echo 'au BufRead,BufNewFile /opt/servers/nginx/conf/* set ft=nginx' > ~/.vim/filetype.vim
最后,请出主角(下载的是本文的附件 ):
- wget http://dl.iteye.com/topics/download/7979de38-1263-3b65-8f7a-e5f567d40fec
- unzip nginx.zip
- mv nginx.vim ~/.vim/syntax/
这样就ok了!
四、基本配置
完成上述工作后,nginx还不能急于投入使用,需要做一些基本配置与优化工作。
修改nginx配置文件:
- vim /opt/servers/nginx/conf/nginx.conf
微调
引用
#使用的用户和组,这里我们为nginx服务新建了nginx账户和www工作组
user nginx www;
#制定的工作衍生进程数(2倍于CPU内核数)
worker_processes 4;
#错误日志存放路径,日志级别由低到高[debug | info | notice | warn | error | crit]
error_log /var/log/nginx/error.log crit;
#指定文件描述符数量 与ulimit -n数值保持一致
work_rlimit_nofile 65535;
events {
#使用的网络I/O模型,Linux用epoll模型,Unix用kqueue模型
use epoll;
#允许的连接数
worker_connections 51200;
}
http{
include mime.types;
default_type application/octet-stream;
#追加 '"$sent_http_cache_control" "$sent_http_pl" "$request_time"'获取请求细节信息
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'
'"$sent_http_cache_control""$sent_http_pl" "$request_time"';
access_log /var/log/nginx/access.log main;
...
server{
...
location / {
root html;
index index.html index.htm index.jsp index.do;
#在header中传递请求放host、ip等信息
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_pass_header Content-Type;
proxy_pass_header Content-Disposition;
proxy_pass_header Content-Length;
...
}
}
}
五、虚拟目录
nginx配置虚拟目录很简单,主要是运用root、alias两个指令。
以访问图片服务为例:
root,用于相对路径
引用
location /image/ {
root /data;
}
当我们访问“/image/”路径时,实际上访问的是“/data/image/”,注意“/data”后面不要有“/”
alias,用于绝对路径
引用
location /image/ {
alias /data/img/;
}
当我们访问“/image/”路径时,实际上访问的是“/data/img/”,注意“/data/img/”以“/”结尾。
六、重定向
有时候链接不加考虑就放出去了,突然哪天需要调整,又不能及时撤回已放出的链接地址。只好自己修改nginx配置。
譬如,放出去的链接:/activity.do?m=v 想让它指到/路径上:
引用
rewrite ^/activity(.*)$ / last;
想要把请求来的参数也带上:
引用
rewrite ^/activity(.*)$ /$1 last;
$1 指得是第一个参数,以此类推。
六、监控
引用
location /status {
stub_status on;
access_log off;
allow 10.10.0.0/16;
allow 10.1.0.0/16;
allow 10.11.0.0/16;
deny all;
}
stub_status on;
access_log off;
allow 10.10.0.0/16;
allow 10.1.0.0/16;
allow 10.11.0.0/16;
deny all;
}
引用
Active connections: 14
server accepts handled requests
62 62 302
Reading: 0 Writing: 3 Waiting: 11
七、日志分割
- #!/bin/bash
- # THis script run at 00:00
- # author dongliang at 2012-09-07
- # Nginx Log Path
- logs_path="/var/log/nginx/"
- # Nginx PID Path
- nginx_pid="/var/run/nginx.pid"
- mkdir -p ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/
- mv ${logs_path}access.log ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/access_$(date -d "yesterday" +"%Y%m%
- d").log
- mv ${logs_path}error.log ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/error_$(date -d "yesterday" +"%Y%m%d"
- ).log
- kill -USR1 `cat $nginx_pid`
赋予执行权限
- chmod +x nginx_log.sh
凌晨执行
- crontab -e
- 0 0 * * * /opt/script/nginx_log.sh
相关内容:
征服 Apache + SSL
征服 Apache + SVN
征服 Apache + SVN + LDAP
征服 Apache + Tomcat
征服 Nginx
征服 Nginx + Tomcat
[url=http://code.google.com/p/nginx-auth-ldap/downloads/detail?name=ngx_http_auth_ldap_module-1.0-a3.tar.gz&can=1&q=][/url]