设为首页 收藏本站
查看: 2817|回复: 6

[经验分享] Nginx之开门见山

[复制链接]

尚未签到

发表于 2012-7-31 08:36:00 | 显示全部楼层 |阅读模式
Nginx之开门见山

目录:
一、简介
二、安装
三、服务控制
四、配置文件说明
五、应用实例

一、简介
    Nginx是一款开放源代码的高性能HTTP服务器、反向代理服务器,同时支持IMAP/POP3代理服务,这是一款自由的软件。
    Igor Ysyoev在2002年开始开发该软件,于2004年发布第一个公开版本。
    Nginx以高性能、高可用、丰富的功能模块、简单明了的配置文档以及低资源占用而著称。Nginx采用最新的网络I/O模型,支持高达50 000个并发连接。
    近年来Nginx在国内取得了突飞猛进的发展,很多门户网站开始提供Nginx解决方案。
   
二、安装
    Nginx软件可以到官网下载:http://nginx.org/en/download.html,目前最新的稳定版为1.2.2。本文运行环境为Nginx-1.2.2,CentOS6.2。
    1. 二进制包安装:
    (nginx for CentOS/Red Hat):
        [iyunv@centos6 ~]# cat > /etc/yum.repos.d/nginx.repo <<EOF
  • >[nginx]
  • >name=nginx rpm
  • >baseurl=http://nginx.org/packages/centos/6/x86_64/
  • >gpgcheck=0
  • >enabled=1
  • >EOF
        [iyunv@centos6 ~]# yum clean all
        [iyunv@centos6 ~]# yum install nginx-1.2.2
  注意:http://nginx.org/packages/centos/6/x86_64/,路径需要根据你自己的实际系统版本与架构填写。
    (nginx for Debain/Ubuntu):
        jacob@ubuntu ~$ sudo cat >> /etc/apt/sources.list <<EOF

        jacob@ubuntu ~$ sudo atp-get update
        jacob@ubuntu ~$ sudo apt-get install nginx
    2. 源码安装:
        [iyunv@centos6 ~]# wget http://nginx.org/download/nginx-1.2.2.tar.gz
        [iyunv@centos6 ~]# tar -xzf nginx-1.2.2.tar.gz  -C  /usr/src
        [iyunv@centos6 ~]# cd /usr/src/nginx-1.2.2
        [iyunv@centos6 ~]# ./configure    --prefix=/usr/local/nginx \
        > --with-ipv6                        \
        > --with-http_ssl_module            \
        > --with-http_realip_module            \
        > --with-http_addition_module        \
        > --with-http_image_filter_module    \
        > --with-http_dav_module            \
        > --with-http_flv_module            \
        > --with-http_mp4_module            \
        > --with-http_gzip_static_module    \
        > --with-http_perl_module            \
        > --with-mail                        \
        > --with-mail_ssl_module
    注意:
configure执行时会依赖与一些其他程序,如会出现报错信息(./configure: error: C compiler gcc is not found)可根据提示安装相应的软件包即可。
            常见的软件包有(gcc,pcre,pcre-devel,openssl,openssl-devel,gd,gd-devel,perl- 5.10.1-127,perl-ExtUtils),其中gd-devel在CentOS6.2光盘中没有,需要从互联网安装。
configure的选项可以根据的自己需求输入,最简单的就是./configure不添加任何选项,所有设置均为默认。
        [iyunv@centos6 ~]# make
        [iyunv@centos6 ~]# make install
    3.进阶:
    Nginx核心模块包括主模块、事件模块,以下这些模块将被configure自动编译,除非configure时指定相应的--without。
        模块名称            描述                                        禁用选项
        Core                  控制端口,错误页面别名等核心功能     --without-http
        Access                基于IP的访问控制                     --without-http_access_module
        Auth Basic            HTTP用户认证模块                     --without-http_auth_basic_module
        Auto Index            自动目录索引                         --without-http_autoindex_module
        Browser               描述用户代理                         --without-http_charset_module
        Charset               重新编码网页                         --without-http_charset_module
        Empty GIF             内存中存放一个图片                     --without-http_empty_gif_module
        FastCGI               FastCGI支持                         --without-http_fastcgi_module
        Geo                   支持IP变量设置                         --without-http_geo_module
        Gzip                  Gzip压缩                             --without-http_gzip_module
        Headers               设置http响应的头部信息
        Index                 首页
        Limit Requests        限制客户端连接频率                     --without-http_limit_req_module
        Limit Conn            会话的并发连接                         --without-http_limit_conn_module
        Log                   自定义日志
        Map                   设置变量                             --without-http_map_module
        Memcached             Memcache支持                         --without-http_memcached_module
        Referer               基于Referer头部信息过滤             --without-http_referer_module
        Rewrite               使用正则表达式重写请求                 --without-http_rewrite_module
        SCGI                  支持SGCI协议                         --without-http_scgi_module
        Upstream              负载均衡                             --without-http_upstream_ip_hash_module
        
    接下来的这些模块属于附加模块,编译软件时需要通过configure指定开启:
        模块名称            描述                                        开启选项
        Embedded Perl        支持Perl                              --with-http_perl_module
        FLV                  支持flash视频                          --with-http_flv_module
        GeoIP                通过IP变量实现负载均衡                  --with-http_geoip_module
        Google Perftools     支持谷歌的性能优化工具                 --with-google_perftools_module
        Gzip Precompression  压缩静态文件                          --with-http_gzip_static_module
        Image Filter         转换图形的过滤器                      --with-http_image_filter_module
        MP4                  支持MP4                                  --with-http_mp4_module
        Real IP              使用Nginx作为后端服务器                  --with-http_realip_module
        Secure Link          使用密钥保护页面                      --with-http_secure_link_module
        SSL                  支持HTTPS/SSL                          --with-http_ssl_module
        Stub Status          查看服务器状态                          --with-http_stub_status_module
        WebDAV               支持WebDAV                              --with-http_dav_module
        
    邮件模块:
        模块名称            描述                                        启用/禁用选项
        Core                邮件代理功能                                --with-mail
                                                                        --without-mail_pop3_module
                                                                        --without-mail_imap_module
                                                                        --without-mail_smtp_module
        Auth                邮件认证
        Proxy               邮件代理
        SSL                 支持SSL/TLS邮件协议                        --with-mail_ssl_module
   
    第三方模块:当需要添加第三方模块时,同样需要在configure时指定需要添加的模块,格式如下。
        ./configure  --add-module=/path/module1 \
                     --add-module=/path/module2
                     ... ...
    在此介绍的模块仅为Nginx常用模块及描述,具体使用方法可期待后期文章... ...
   
三、控制Nginx服务
    1. 启动服务:
    [iyunv@centos6 ~]# /usr/local/nginx/sbin/nginx
    [iyunv@centos6 ~]# ps  aux  | grep  nginx                //查看Nginx进程信息
    2. 停止服务:
    [iyunv@centos6 ~]# kill -QUIT `cat /usr/local/nginx/logs/nginx.pid`
    我们可以通过传输信号给主进程ID号来管理Nginx服务,Nginx主进程ID号默认存储在/usr/local/nginx/logs/nginx.pid文件中,
    该文件名可以通过configure修改,或者在Nginx主配置文件中通过pid指定。
        Nginx支持以下管理信号:
        信号            描述
        TERM,INT        快速关闭
        QUIT            优雅关闭
        HUP             重新加载配置文件(等同于重启)
        USR1            重启加载日志文件
        USR2            升级Nginx程序
        WINCH           优雅地关闭子工作进程
    为了重新读取配置文件,HUP信号必须发送给Nginx主进程。
    主进程首先检查配置文件语法是否有效,再尝试应用新的配置,这里会重新打开日志文件并建立新的监听套接字,如果这个过程失败Nginx可以回滚使用就配置文件继续工作。
    如果成功Nginx会启动新的工作子进程,并发送消息给旧的工作进程(QUIT信号),这样旧的进程停止监听服务但会继续为当前正在进行的连接服务,
    当所有的就客户连接终止后,就工作进程被关闭。
    3. Nginx本身并为附带启动脚本,本着长久使用的便利性,建议将对Nginx的控制写入脚本。篇幅有些,下一篇博客文章会专门讲解这样的启动脚本。
   
四、基本配置
    以下为Nginx典型主配置文档:/usr/local/nginx/conf/nginx
  • #user  nobody;                                          //设置用户与组
  • worker_processes  1;                                    //启动进程数
  • error_log  logs/error.log;                              //错误日志
  • pid        logs/nginx.pid;                              //Nginx进程号
  • events {
  •     worker_connections  1024;                            //每个进程的连接数
  • }
  • http {
  •     include       mime.types;                            //定义文件类型
  •     default_type  application/octet-stream;              //默认文件类型
  •     #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
  •     #                  '$status $body_bytes_sent "$http_referer" '
  •     #                  '"$http_user_agent" "$http_x_forwarded_for"';
  •                                                         //以上被注释的log_format可以定义自己的日志格式
  •     #access_log  logs/access.log  main;                  //使用log_format定义的main日志格式产生access.log日志文件,注这里默认是被注释的
  •     sendfile        on;                                  //是否调用sendfile()进行数据的拷贝,sendfile()拷贝数据是在内核级别完成,所以会比一般的read,write更高效
  •     #tcp_nopush     on;                                  //开启后服务器的响应头部信息产生独立的数据包发送,即一个响应头信息一个包
  •     #keepalive_timeout  0;                               //保持连接的超时时间
  •     keepalive_timeout  65;
  •     #gzip  on;                                          //是否启用压缩功能,将页面压缩后传输更节省流量
  •     server {                                            //定义虚拟主机
  •     listen       80;                                    //服务器监听的端口
  •     server_name  www.jacob.com;                         //访问域名
  •         #charset koi8-r;                                //页面编码,如果网页的编码与charset不同将被自动转码(转码后可能显示为乱码)
  •         #access_log  logs/host.access.log  main;        //设置服务器www.jacob.com的访问日志
  •         location / {                                    //匹配URL地址
  •             root   html;                                //网页根路径,如果Nginx安装在/usr/local/nginx目录下,则网页在/usr/local/nginx/html目录下
  •             index  index.html index.htm;                //默认首页
  •         }
  •         #error_page  404              /404.html;        //错误页面
  •         error_page   500 502 503 504  /50x.html;
  •         location = /50x.html {
  •             root   html;
  •         }
  •         # proxy the PHP scripts to Apache listening on 127.0.0.1:80
  •         #
  •         #location ~ \.php$ {
  •         #    proxy_pass   http://127.0.0.1;
  •         #}                                               //以上注释行用来设置代理,当客户端访问php页面时,自动将请求转发给后端服务器
  •         # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  •         #
  •         #location ~ \.php$ {
  •         #    root           html;
  •         #    fastcgi_pass   127.0.0.1:9000;
  •         #    fastcgi_index  index.php;
  •         #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
  •         #    include        fastcgi_params;
  •         #}                                              //以上注释行用来设置代理,当客户端访问php页面时,自动将请求转发给后端服务器
  •         # deny access to .htaccess files, if Apache's document root
  •         # concurs with nginx's one
  •         #
  •         #location ~ /\.ht {
  •         #    deny  all;                                 //拒绝所有人访问.ht页面
  •         #}
  •     }
  •     # another virtual host using mix of IP-, name-, and port-based configuration
  •     #
  •     #server {                                            //定义虚拟主机(此处设置与上面一个server虚拟主机格式一样
  •     #    listen       8000;
  •     #    listen       somename:8080;
  •     #    server_name  somename  alias  another.alias;
  •     #    location / {
  •     #        root   html;
  •     #        index  index.html index.htm;
  •     #    }
  •     #}
  •     # HTTPS server
  •     #
  •     #server {                                            //定义虚拟主机
  •     #    listen       443;
  •     #    server_name  localhost;
  •     #    ssl                  on;                        //开启SSL
  •     #    ssl_certificate      cert.pem;                  //指定证书文件
  •     #    ssl_certificate_key  cert.key;                  //指定私钥文件
  •     #    ssl_session_timeout  5m;
  •     #    ssl_protocols  SSLv2 SSLv3 TLSv1;
  •     #    ssl_ciphers  HIGH:!aNULL:!MD5;
  •     #    ssl_prefer_server_ciphers   on;
  •     #    location / {
  •     #        root   html;
  •     #        index  index.html index.htm;
  •     #    }
  •     #}
  • }

   
五、示例(虚拟主机、HTTPS)
    注意:实现SSL需要configure时添加--with-http_ssl_module模块
    1. 修改配置文件部分内容如下:
  • http {
  •     include       mime.types;
  •     default_type  application/octet-stream;
  •     sendfile        on;
  •     keepalive_timeout  65;
  •     gzip  on;
  •     server {
  •         listen       80;
  •         server_name  www.demo.com;
  •         charset utf-8;
  •         access_log  logs/demo.access.log;
  •         location / {
  •             root   demo;
  •             index  index.html index.htm;
  •         }
  •     }
  •     # HTTPS server
  •     server {
  •         listen       443;
  •         server_name  www.test.comm;
  •         ssl                  on;
  •         ssl_certificate      cert.cer;                //证书路径同nginx.conf在一个目录
  •         ssl_certificate_key  test.pem;                //私钥路径同nginx.conf在一个目录
  •         ssl_session_timeout  5m;
  •         ssl_protocols  SSLv2 SSLv3 TLSv1;
  •         ssl_ciphers  HIGH:!aNULL:!MD5;
  •         ssl_prefer_server_ciphers   on;
  •         location / {
  •             root   test;
  •             index  index.html index.htm;
  •         }
  •     }
  • }

    2. 生成证书的方法如下:
    [iyunv@centos6 ~] openssl genrsa -out test.pem 2048                           //生成私钥
    [iyunv@centos6 ~] openssl req -new -x509 -key test.pem -out cert.cer          //根据私钥生成根证书
    [iyunv@centos6 ~] cp  {test.pem,cert,cer}  /usr/local/nginx/conf/           //拷贝证书

2. 创建测试用网页
    [iyunv@centos6 ~] mkdir /usr/local/nginx{demo,test}
    [iyunv@centos6 ~] cat > /usr/local/nginx/demo/index.html  <<EOF
    > <html>
    > <title>Hello The World</title>
    > <body>
    > This is a demo page!
    > </body>
    > </html>
    > EOF
    [iyunv@centos6 ~] cat > /usr/local/nginx/test/index.html  <<EOF
    > <html>
    > <title>Hello The World</title>
    > <body>
    > This is a demo page!
    > </body>
    > </html>
    > EOF
    3. 重启Nginx
    [iyunv@centos6 ~] kill -HUP `cat /usr/local/nginx/logs/nginx.pid`
    4. 客户端访问(需要DNS解析或hosts文件解析)
   


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-682-1-1.html 上篇帖子: 把Nginx注册成Windows的系统服务 下篇帖子: 编译nginx报错make[1]: *** [/usr/local/pcre/Makefile] Error 127 版权 法律

尚未签到

发表于 2013-3-13 20:12:38 | 显示全部楼层
沙发!沙发!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-5-15 23:53:48 | 显示全部楼层
看尽天下A片,心中自然无码~

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-5-18 16:08:37 | 显示全部楼层
俺从不写措字,但俺写通假字!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-5-21 04:24:48 | 显示全部楼层
脱了衣服我是禽兽,穿上衣服我是衣冠禽兽!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-5-24 00:40:51 | 显示全部楼层
有竞争才有进步嘛

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-5-29 06:16:45 | 显示全部楼层
佛曰,色即是空,空即是色!今晚,偶想空一下

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表