nginx入门教程

小TOT 创建于 2017-02-07

什么是nginx

Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由Igor Sysoev为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、新浪、网易、腾讯等。

为何使用nginx

Nginx 是一个很强大的高性能Web和反向代理服务器,它具有很多非常优越的特性: Nginx 可以在大多数 Unix like OS 上编译运行,并有 Windows 移植版。同时在高连接并发的情况下,Nginx是Apache服务器不错的替代品,据统计最高并发量为apache的10倍。能够支持高达 50,000 个并发连接数的响应,感谢Nginx为我们选择了 epoll and kqueue作为开发模型。Nginx的1.4.0稳定版已经于2013年4月24日发布,一般情况下,对于新建站点,建议使用最新稳定版作为生产版本,已有站点的升级急迫性不高。Nginx 的源代码使用 2-clause BSD-like license。

如何安装

作为一个成熟的开源产品,众多的软件仓库都收录了它。因此可以非常方便的安装官方编译好的二进制版本。当然如果你要安装最新的nginx体验最新的特性。可以选择手动编译安装。官方网站停用源码下载。 下面演示centos上使用yum安装nginx。

[root@host ~]# yum install nginx 成功安装之后启动nginx服务。 [root@host ~]# service nginx start [root@host ~]# curl http://localhost 得到nginx的欢迎页面。 至此nginx安装完成

nginx配置概述

使用yum命令安装的配置文件放在系统默认的配置文件目录/etc下。即nginx所有的配置文件位于/etc/nginx下。 [root@host ~]# cd /etc/nginx [root@host ~]# ls 可以看到nginx所有配置相关的文件,请留意注释:

conf.d     fastcgi.conf          fastcgi_params          koi-utf  mime.types          nginx.conf          scgi_params          uwsgi_params          win-utf
default.d  fastcgi.conf.default  fastcgi_params.default  koi-win  mime.types.default  nginx.conf.default  scgi_params.default  uwsgi_params.default

其中nginx的配置文件为nginx.conf下面来看看nginx中的主要内容。

# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user              nginx;## 配置工作进程运行身份
worker_processes  1;##工作进程数,最好和cpu核数一直

error_log  /var/log/nginx/error.log;# 错误日志,可能被后面的覆盖
#error_log  /var/log/nginx/error.log  notice;
#error_log  /var/log/nginx/error.log  info;

pid        /var/run/nginx.pid;# 运行pid


events {
    worker_connections  1024;
}

## 配置一个http模块
http {
    include       /etc/nginx/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"';
    ##访问日志
    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    # Load config files from the /etc/nginx/conf.d directory
    # The default server is in conf.d/default.conf
    # 真正的服务配置通过其他文件配置,使用include指令导入其他文件的配置
    include /etc/nginx/conf.d/*.conf;

}

打开conf.d目录下的defaut.conf文件。内容如下

#
# The default server
#
server {
    listen       80 default_server; ## 监听端口,标记默认服务
    server_name  _;## 服务名称,

    #charset koi8-r;

    #access_log  logs/host.access.log  main;

    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;
    ## 所有'/'开头的访问使用下面配置。
    location / {
        root   /usr/share/nginx/html;## 服务根目录
        index  index.html index.htm;## 主页文件
    }

    error_page  404              /404.html;
    location = /404.html {
        root   /usr/share/nginx/html;
    }

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # 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;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
} 

通过以上配置我们可以知道。nginx的默认服务访问的文件位于: /usr/share/nginx/html 我们之前使用curl localhost.访问的页面文件实际上就位于/usr/share/nginx/html目录下。

nginx如何工作

下面简单介绍一下nginx如何工作 使用命令:

`[root@host ~]# ps -ef |grep nginx 得到如下结果:

root      1115     1  0 Mar26 ?        00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx     1117  1115  0 Mar26 ?        00:00:10 nginx: worker process
root      9853  9830  0 17:52 pts/0    00:00:00 grep nginx 

可以看出nginx的启动使用了/usr/sbin/nginx -c /etc/nginx/nginx.conf命令。nginx执行文件加上配置文件etc/nginx/nginx.conf。这样nginx就能够根据我们的配置进行工作了。 nginx在启动后,会有一个master进程和多个worker进程。master进程主要用来管理worker进程,包含:接收来自外界的信号,向各worker进程发送信号,监控worker进程的运行状态,当worker进程退出后(异常情况下),会自动重新启动新的worker进程。而基本的网络事件,则是放在worker进程中来处理了。多个worker进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的。一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其它进程的请求。worker进程的个数是可以设置的,一般我们会设置与机器cpu核数一致,这里面的原因与nginx的进程模型以及事件处理模型是分不开的。