nginx安装与配置

来源:互联网 发布:淘宝追加评论时间 编辑:程序博客网 时间:2024/05/02 04:35

本文翻译自官网手册,转载请注明出处。

使用:

1,编译安装
    ./configure  根据参数生成Makefile
    make    根据Makefile文件编译生成可执行文件并输出到configure中指定的路径及include编译指定的模块等。

    configure参数说明:
        --prefix=path  设置编译生成的server文件输出目录,这个参数设置的路径会被其他参数及nginx.conf配置文件中参数依赖。其他参数有些会把这个参数指定的路径作为前缀使用。默认情况下为/usr/local/nginx。
        
        --sbin-path=path 设置输出文件名称及相对路径。这个文件默认为prefix/sbin/nginx。nginx表示可执行文件。这个配置一般不需要自定义指定。

        --conf-pah=path 设置输出的配置文件名称,默认为prefix/conf/nginx.conf,在nginx执行程序启动时是可以通过-c filename参数指定要使用的配置文件名称。不特殊指定的时候,使用prefix/conf/nginx.conf

        --pid-path=path  设置Pid文件的名称,默认为prefix/logs/nginx.pid,文件会保存nginx管理进程的PID。不过在安装后,这个PID文件的名称仍然可以由nginx.conf配置文件中的pid参数重新指定。

        --error-log-path=path  设置日志文件名称,默认为prefix/logs/error.log,这个文件名称可以在安装后由nginx.conf文件中的error_log参数指定。

        --http-log-path=path  设置HTTP访问请求日志文件名称,默认为prefix/logs/access.log,这个文件名称可以在安装后由nginx.conf文件中的access_log参数指定。

        --user=name  设置工作线程使用的用户及其权限。这个配置可以在安装后通过nginx.conf配置文件中的user参数指定。默认为nobody

        --group=name 设置工作线程使用的用户组名及其权限。这个配置可以在安装后通过nginx.conf配置文件中的user参数指定。默认为--user参数指定的用户同名。

        --with-select-module
        --without-select-module  是否启用select()方式。如果系统不支持kqueue,epoll,rtsig,或者/dev/poll方式,则这种方式会自动启用。

        --with-select-module
        --without-select-module  是否启用poll()方式。如果系统不支持kqueue,epoll,rtsig,或者/dev/poll方式,则这种方式会自动启用。

        --without-http-gzip-module  不支持对http响应的压缩方式。

        --without-http-rewrite-module  不支持编译转发和改变host名模块。这个模块允许HTTPserver转发请求,并改变请求中的URI。如果支持这个参数,PCRE库需要被添加并被编译进来。

        --without-http-proxy-module  不支持编译HTTP server 代理模块。proxying_module。

        --with-http-ssl-module  编译事HTTP server支持HTTPS_protocol_support,这个模块不是默认编译的,编译这个模块需要OpenSSL库的支持。

        --with-pcre=path  设置PCRE库的源路径。库需要从http://zlib.net/上下载并解压,其他的工作将由./configure和make程序来完成。这个库用来支持正则表达式,即配置中的location参数的功能,及ngx_http_rewrite_module模块中的功能。

        --with-pcre-jit 编译支持PCRE jit编译支持功能

        --with-zlib=path 设置ZLIB库路径。库需要从http://zlib.net/上下载并解压,其他的工作将由./configure和make程序来完成。这个库用来支持正则表达式,即配置中的location参数的功能,及ngx_http_glib_module模块中的功能。

        --with-cc-opt  设置其他需要设置的编译器参数,这些参数会被添加到CFLAG编译变量中。在BSD上编译PCRE库时,--with-cc-opt="-I /usr/local/include" 应该被指定。另外。如果select()支持的文件数需要增加,也可以通过这个参数来指定。如:--with-cc-opt="-D FD_SETSIZE=2048"

        --with-ld-opt=parameters  设置链接时需要使用的额外参数。如在FreeBSD上使用PCRE编译时需要指定:--with-ld-opt="-L /usr/local/lib"

    一个configure程序执行的参数例子如下:
./configure
    --sbin-path=/usr/local/nginx/nginx
    --conf-path=/usr/local/nginx/nginx.conf
    --pid-path=/usr/local/nginx/nginx.pid
    --with-http_ssl_module
    --with-pcre=../pcre-4.4
    --with-zlib=../zlib-1.1.3

2  使用配置指导
    2.1 启动,停止,和重新加载配置文件
        使用语法
            nginx -s  stop|quit|reload|reopen
          stop — 快速关闭,相当于强制推出?貌似也是在等请求处理完成后推出,和quit有何区别?
quit — 优雅关闭,工作线程不接受请求,处理完请求后退出。
reload —重新加载配置文件
reopen —重新打开配置文件。

对nginx也可以使用kill命令发送推出命令给主线程执行关闭:
kill -s QUIT 1628   //其中1628为主线程PID。

查看nginx是否启动
    ps -ax | grep nginx

    2.2 配置文件结构


        nginx包含有几个模块,通过配置文件中指定的参数进行控制。参数配置被分为独立参数和块参数。
        独立参数只包含参数名称及参数值,并以;号结尾。
        块参数在参数名后通过{}将众多独立参数包括起来作为参数值,其中的独立参数仍然遵循上面的参数规则。

        如果在块中还有其他块,则上层块被成为context:如event,http,server,location

        如果配置参数被放置在任何context之外,则称其在main context中。
        #起头的为注释。

    2.3 Serving static content
        web server重要的目标是输出文件,这里一个例子,根据请求分别从/data/www和/data/images输出html文件及image文件。这里用到配置文件中http块下的一个带两个location块的server块。

        http {
            server {
                location / { 
                    root /data/www;
                }

                location /images/ {
                    root /data;
                }
            }
        }
        
        http块下可以放置多个server块,server块通过监听端口和服务器名称区分。一旦nginx确定使用哪个server来处理请求时,nginx测试server中定义的location字段指定的URI比较。
        如上,如果location指定的URI与请求的URI匹配,则将指定的URI加到location中root字段指定的目录后面,作为获取本地数据的路径。如上面两个location获取到的路径分别为/data/www/和/data/images/
        如果一个server下有多个location是匹配的。则nginx选取前缀最长的使用。

        如上配置,就是一个可用的server配置,在80端口监听,并可以在本机以http://localhost/访问。
        比如,对于/images/为前缀的URIs,server将返回/data/images/目录下的文件。

        如:对http://localhost/images/example.png请求,server返回/data/images/example.png作为响应。如果文件不存在,nginx将会返回404错误。如果URI不是以/images为前缀,则请求会被映射到/data/www上。例如,对于请求http://localhost/some/example.png nginx返回/data/www/some/example.png作为响应。

        注:如果nginx发生问题,可以尝试在access.log和error.log中查找错误原因,日志文件一般会放置在/usr/local/nginx/logs或者/var/log/nginx,或者可以在nginx.conf文件中查看日志文件位置。

    2.3 配置作为代理服务器
        使用nginx的一种常用方式是将之作为代理服务器使用。这种场景下, 代理服务器接收请求,将请求转发给被代理的真正的服务器,并获取响应,最后转发给客户端。
        此处给了一个基本的代理服务器配置的例子,这个服务器只对获取images文件请求直接服务,并将其他请求都转发给另一个被代理的服务器。在这个例子下,所有服务器都运行在单实例。

        首先,配置一个服务器在8080端口监听请求。并将所有请求映射到本地目录/data/up1目录的文件系统下。将index.html放在该目录下,同事注意root配置在server上下文中,意味着root对其中的所有location都生效,配置文件如下:
        server {
    listen 8080;
    root /data/up1;
    location / {
    }
}
        
        然后使用以下配置去定义一个代理服务器,在这个配置中,在第一个location中,使用了proxy_pass参数将匹配的请求转发到指定的协议,主机,和端口上,在此例中,为http://localhost:8080。也就是上面定义的服务器。配置详细如下:
server { location / { proxy_pass http://localhost:8080; } location /images/ { root /data; } }
        进一步的,我们还可以修改第二个location块,可以将获取指定文件扩展名的请求映射到本地的目录/data/images下。修改后的location如下:
        
location ~ \.(gif|jpg|png)$ { root /data/images; }
        这个正则表达式,匹配以.gif  .jpg  .png结尾的URI请求。正则表达式需要以 ~ 来指定。匹配的正则表达式将被映射到/data/images目录。
    nginx选择一个location块去服务请求的步骤是:先匹配普通location字符串,并记住匹配的最长的一个,再去匹配正则表达式location,按照配置的先后顺序顺序匹配,如果匹配到,则以第一个匹配到的location为准。也就是说,这里普通location配置先后顺序并无影响,nginx会全部匹配并选择最长的一个,但是正则表达式location是以先后顺序匹配的,匹配到一个即终止匹配。

最后,这个配置的结果就是:服务器过滤以.jpg,.gif,.png为结尾的请求,并将请求URI添加到映射根目录后在本地获取数据,另外将其他的所有请求都转发到被代理的服务器去处理。

2.4 配置FastCGI代理
    nginx可以用来路由请求到FastCGI服务器,由其框架或者服务器编程语言Php来处理。
    最基本的nginx代理服务器与fastCGI服务器结合时的配置使用fastcgi_pass配置参数取代了proxy_pass参数,并使用fastcgi_param参数设置传递给fastCGI服务器的参数。假设FastCGI服务器可以通过localhost:9000访问到,修改上一节中的配置文件,将proxy_pass换为fastcgi_pass并将参数值替换为localhost:9000, 同事增加fastcgi_param参数,指定fastcgi参数SCRIPT_FILENAME 和QUERY_STRING ,其中SCRIPT_FILENAME 用来指定脚本名称,QUERY_STRING 用来指定请求参数。于是,配置大概如下:
server { location / { fastcgi_pass localhost:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param QUERY_STRING $query_string; } location ~ \.(gif|jpg|png)$ { root /data/images; } }
这个配置将把除了访问静态图像数据之外的所有请求通过FastCGI协议转发到fastcgi服务器处理。
0 0
原创粉丝点击