打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Nginx Primer翻译.

原文:http://blog.martinfjordvald.com/2010/07/nginx-primer/

率先要记住的是,Nginx的搭配文件是逐层继承的,外层定义的搭配项将会作为里层的默认搭配,因而,良好将通用的搭配项放在最顶层。当然,这种继承而来的默认搭配能够在里层被重现。

常用的搭配有三层,在搭配文件中以块的形式出现。HTTP块->server块->location块。

另外,有两种特异的location块,事件(event)块和root块,HTTP块和事件块均在root块中。这两种块只包括了少量的配相消息,更多的则在其他的三种块中。

这些块各司其职。server块描写了一种在apache中称为虚构服务器的构造,location块重要是针对URI。

Virtual Host

搭配文件可能会揭示若干个server块,Nginx将会依据其中的server_name项相称HOST头字段,以定夺批准哪个server块,并依据root项定义根目录。这两项构筑了Virtual Host的基础,下面是一个例子

server { listen 80; server_name domain.com *.domain.com; rewrite ^ http://om$request_uri permanent; } server { listen 80; server_name om; index index.html; root /home/domain.com}

例子中定义了两个virtual host。当服务器接到的HOST头字段是domain.com或除非www以外的它的子域名时,第一个server块将起作用。之因而www子域名会被第二个server快左右,是因为Nginx总是抉择最准确的相称。

这个个性使得我们能够创立一个默认的virtual host处理那些未曾全面相称的域名。所幸这并不混杂,我们只必需给listen项增加一个default_server符号就能够了。这使得所有不带HOST头字段可能HOST头字段未曾能够相称其他virtual host的哀求被领导到这个默认的virtual host。等闲穿越IP直接拜会可能穿越一个随机的域名指向你的IP哀求会引发上面的收获。下面例子中的server_name项值为'_',代表什么也不是,什么也不做。它只是一个无意义的HOST头,来确保未曾哀求能够和它相称,它帮助你容易的不定义一个server_name。

server { listen 80 default_server; server_name _; index index.html; root 89.35msn.com/var/www/default}

Location

万一你之前利用xi.xihuanplaza.com的是apache,那么接下来的内容你定然要当心。Nginx未曾批准混杂的rewrite,我们能够穿越location块来告终同样的收获。

有一点定然要打听,这些location,除非named location,穿越相称URI,最后只有一个location块见效。这即便为什么我评比将搭配项尽可能的放在外层的block中。一个在location / 中定义的root项不会波及到location /images,除非它定义在server块中。我可信你曾经打听如何在更外层定义搭配项以避免重复搭配。

另一个必需当心的地方是,Nginx利用最准确的location相称。关于location的翔实搭配法定,这里有翔实的解释location directive wiki entry,你该领先阅读这些内容。

PHP

location块能够捉拿PHP哀求。

server { listen 80; server_name forum.domain.com; index index.php; root /home/domain.com/forum; location ~* /.php$ { if (!-f $request_filename) { return 404; } fastcgi_pass 127.0.0.1:9000; }}

上例中我利用了一些不合规范的写法。Nginx不评比在location块中嵌套块,但这里是较少的能够例外之一。前面提到过,Nginx关怀location而不是文件,因而它相称URI只关怀是否以.php作为结尾,而不关怀它是不是一个文件。因而,一个/forum/avatars/user2.jpg/index.php哀求被location块送给PHP运行,万一PHP未曾被准确的搭配,那么万一/forum/avatars/user2.jpg/index.php不存在,PHP将会运行/forum/avatars/user2.jpg,这是极不平安的。这不是Nginx的bug,而是存心为之,未来我们也不会修复它。

这种平安问题能够在PHP搭配中被修正:搭配php.ini文件cgi.fix_pathinfo=0

最后,.php文件被穿越fastcgi被送至在端口9000上运行的PHP历程。

锦上添花

上面的设置曾经能够工作,但琢磨到SEO(搜查引擎优化),目前的流行批准搜查引擎友好的URL,等闲这将引入少量的rewrite,但Nginx让我们能够用一行语句告终,让后台脚本更加轻率编写。

server { listen 80; server_name forum.domain.com; index index.php; root /home/domain.com/forum; try_files $uri $uri/ /index.php; location ~* /.php$ { if (!-f $request_filename) { return 404; } fastcgi_pass 127.0.0.1:9000; }}

能看出差异吗?确乎很小。try_files搭配项的含义是:先哀求全面URI,这意味着静态网页哀求将会在这一步归来并告终。接下来哀求全面URI加斜线来查询一个目录。万一前两步均未曾找到收获,哀求将会被送至/index.php,它引起一个location块捉拿,穿越fastcgi_pass处理。PHP将会在$_SERVER['PATH_INFO']中登记全面的URI。过程容易,美观,而且草带会意。

最后一段不想也无须翻了

Further Reading

Theofficial nginx wikiis an invaluable resource, a good way to expand your knowledge about Nginx is to read the directives and variables in theCore module. Also see thefull config exampleto get an idea of a more complex configuration filecgi.fix_pathinfo=0se

Related posts:

    File Uploading With PHP & NginxBook Review: Nginx HTTP Server12,000 Requests per second with Nginx, PHP and Memcached
因而两者的联系是互补的,而非竞争的。 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
nginx配置虚拟主机[整理]超详细
Nginx实现多个站点使用一个端口(配置Nginx的虚拟主机) ? 耕耘半亩田
如何正确配置Nginx+PHP | Sina App Engine Blog
nginx根据http_user_agent防DDOS
在nginx日志的access log中记录post请求的参数值
nginx 正则表达式匹配入门篇
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服