`

征服 Nginx

阅读更多
赶上要配置测试服务器,赶上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:

#追加一个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安装路径在其它位置,请对应修改!
然后赋予这个文件执行权限:
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


三、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;
        }


引用

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]
  • 大小: 9 KB
分享到:
评论
4 楼 lection.yu 2012-05-31  
辛苦了。。
3 楼 snowolf 2012-05-31  
snowolf 写道
lection.yu 写道
多谢楼主的文章,给我帮助很大,让我在部署nginx上有了更加深刻的理解。又学习了许多linux上的小知识。
美中不足的是,创建nginx服务的脚本代码中,很多双引号使用了中文字符,着实困扰了我一阵子,我后来逐行调试才发现。。感谢上帝。。我只找了4,5行就出现了中文的引号。

在家里改帖子,突然样式发生了问题,一个一个改,还是有漏网之鱼。 这就重新修改~

搞定!
2 楼 snowolf 2012-05-31  
lection.yu 写道
多谢楼主的文章,给我帮助很大,让我在部署nginx上有了更加深刻的理解。又学习了许多linux上的小知识。
美中不足的是,创建nginx服务的脚本代码中,很多双引号使用了中文字符,着实困扰了我一阵子,我后来逐行调试才发现。。感谢上帝。。我只找了4,5行就出现了中文的引号。

在家里改帖子,突然样式发生了问题,一个一个改,还是有漏网之鱼。 这就重新修改~
1 楼 lection.yu 2012-05-31  
多谢楼主的文章,给我帮助很大,让我在部署nginx上有了更加深刻的理解。又学习了许多linux上的小知识。
美中不足的是,创建nginx服务的脚本代码中,很多双引号使用了中文字符,着实困扰了我一阵子,我后来逐行调试才发现。。感谢上帝。。我只找了4,5行就出现了中文的引号。

相关推荐

    arm 架构 docker运行nginx镜像包

    arm 架构 docker运行nginx镜像包,arm 架构 docker运行nginx镜像包,arm 架构 docker运行nginx镜像包,arm 架构 docker运行nginx镜像包,arm 架构 docker运行nginx镜像包,arm 架构 docker运行nginx镜像包,arm 架构...

    centos8 nginx1.20.1 与nginx配置文件

    现在,我们可以下载Nginx的源代码包`nginx-1.20.1.tar.gz`。你可以通过wget或者浏览器将文件下载到本地,然后解压: ```bash wget http://nginx.org/download/nginx-1.20.1.tar.gz tar -zxvf nginx-1.20.1.tar.gz cd...

    nginx版本升级步骤

    **Nginx版本升级步骤详解** 在Web服务器领域,Nginx以其高性能、低内存消耗以及高并发处理能力而备受青睐。随着新版本的发布,可能会包含性能优化、安全修复和新特性,因此定期更新Nginx版本是必要的。本文将详细...

    nginx1.16镜像包

    nginx1.16镜像包 使用docker load -i xx.tar 拉取镜像 使用docker images 查看是否成功。 运行容器 docker run --name nginx-test -p 8080:80 -d nginx 参数说明: --name nginx-test:容器名称。 -p 8080:80: ...

    nginx arm64版本nginx-linux-arrch64.zip

    这个名为"nginx-linux-arm64.zip"的压缩包提供的是专为ARM64架构(也称为AArch64)编译的Nginx版本,适用于基于Linux操作系统的64位ARM处理器设备,如树莓派、某些云服务器或嵌入式系统。无需繁琐的编译过程,只需...

    nginx-1.13.3,nginx1.13.3不存在信息泄漏漏洞安全稳定nginx版本

    **Nginx 1.13.3 版本详解** Nginx 是一款高性能的 HTTP 和反向代理服务器,广泛应用于网站托管、负载均衡以及应用程序交付等领域。它以其高效、稳定和轻量级的特性著称,尤其在处理静态内容和高并发请求时表现优秀...

    nginx-1.24.0.tar

    Nginx 1.24.0 是 Nginx 开源项目发布的一个重要更新版本,该版本在性能优化、功能增强以及安全性提升方面带来了诸多改进。当您下载 Nginx 1.24.0 的压缩包时,您将获得一个包含 Nginx 源代码的压缩文件,通常命名为 ...

    实战nginx.pdf

    实战nginx.pdf。主要内容包括:第1章 Nginx简介;第2章Nginx服务器安装与配置;第3章Nginx基本配置与优化;第4章Nginx与PHP;第5章Nginx与JSP、ASP.NET..第6章Nginx http负载均衡和反向代理;第7章Nginx 的rewrite...

    Nginx-1.23.2.zip

    Nginx是一个高性能的Web服务器和反向代理服务器,它以其高效的并发处理能力、低内存占用和稳定性而闻名。在1.23.2版本中,Nginx继续提供了优化和改进,以满足不断变化的互联网需求。这个版本可能是对之前版本的bug...

    nginx带nginx-http-flv模块windows编译版rtmp

    **Nginx与Nginx-RTMP及Nginx-HTTP-FLV模块** Nginx是一款高性能、轻量级的Web服务器/反向代理服务器,被广泛应用于高并发场景,尤其在处理静态文件、HTTP缓存以及反向代理等方面表现出色。Nginx以其高效的事件驱动...

    nginx替代方案,nginx代替apache与jboss

    ### Nginx 作为 Apache 和 JBoss 的替代方案 #### 背景介绍 随着互联网技术的不断发展,网站流量的增长对服务器性能提出了更高要求。Apache 和 JBoss 是两种广泛使用的 Web 服务器和应用服务器,但在高并发场景下,...

    在linux系统上升级nginx版本

    在 Linux 系统上升级 Nginx 版本 Nginx 是一个流行的开源 Web 服务器软件,可以运行在多种操作系统上,其中包括 Linux。随着 Nginx 的不断更新和发展,升级 Nginx 版本成为一个不可避免的问题。本文将指导您在 ...

    Nginx课件完整版.pdf

    Nginx课件完整版.pdf Nginx是一款功能强大的网络服务器软件,能够提供高性能的Web服务器、反向代理、负载均衡等功能。本资源摘要信息将对Nginx的主要知识点进行详细的介绍。 什么是Nginx? Nginx是一个基于C语言...

    Linux离线安装nginx安装包

    在Linux系统中,离线安装Nginx是一个常见的需求,特别是在没有互联网连接或者网络环境受限的服务器上。本文将详细讲解如何通过离线方式在Linux上安装Nginx,同时也会涉及Nginx依赖的软件如openssl和gcc的安装过程。 ...

    arm架构nginx编译器安装

    在IT领域,尤其是在服务器配置和优化的过程中,ARM架构和Nginx扮演着至关重要的角色。ARM(Advanced RISC Machines)架构是一种广泛应用于嵌入式设备、移动设备以及高性能计算的处理器架构,以其低功耗和高效能而...

    nginx 映射本地文件

    **Nginx 本地文件映射详解** 在IT行业中,Nginx是一个广泛使用的高性能Web服务器和反向代理服务器,以其高效、稳定和轻量级的特性受到青睐。其中一个实用的功能是通过配置来映射本地文件,使得用户可以通过HTTP协议...

    ubuntu 1804 nginx 离线安装包

    在Ubuntu 18.04系统中安装Nginx服务器是一项常见的任务,特别是在无互联网连接的环境下,离线安装显得尤为重要。本资源提供了一个适用于这种场景的解决方案,它包括了Ubuntu 18.04环境下Nginx的离线安装包。这个离线...

    Nginx UI 是一个全新的 Nginx 网络管理界面,旨在简化 Nginx 服务器的管理和配置(源码)

    Nginx UI 是一个全新的 Nginx 网络管理界面,旨在简化 Nginx 服务器的管理和配置。它提供实时服务器统计数据、ChatGPT 助手、一键部署、Let's Encrypt 证书的自动续签以及用户友好的网站配置编辑工具。此外,Nginx ...

    Nginx1.8.0安装简述

    Nginx 1.8.0 安装简述 Nginx 是一种流行的开源 Web 服务器软件,广泛应用于生产环境中。为了帮助读者快速掌握 Nginx 的安装过程,本文将详细介绍 Nginx 1.8.0 的安装步骤。 一、下载依赖项 在安装 Nginx 之前,...

Global site tag (gtag.js) - Google Analytics