本文翻译自官网手册,转载请注明出处。
使用:
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