nginx安装与配置

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

使用:

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服务器处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值