Nginx基础篇
翻译了官网nginx基础篇章的英文, 应该说对初学者非常有帮助
nginx基本命令
向nginx发送信号:
nginx -s [signal]
signal有以下几种:
1. stop: 快速关闭nginx服务器
2. quit: 等nginx处理完当前请求,关闭服务器。(执行该命令的人必须是启动nginx的用户)
3. reload: 使nginx重新加载配置,当nginx服务器接收到这个命令是,回去检测配置的正确。如果正确,主进程则加载新配置创建新的工作进程,并通知旧进程关闭。
4. reopen: 重开日志文件
nginx配置
配置结构
nginx配置文件由指令和指令块组成:
指令: 一个简单的指令由 命令和参数 组成。指令的命令和参数使用空格隔开,使用分号结尾。配置文件中,使用 `#` 号键注释。
指令块: 一个指令块包含很多简单的指令。同时,指令块不再使用分号结尾,而是使用大括号{和}包裹起来。
关系: 指令块内包含很多指令, 指令块通常被称为环境(例如: events, http, server, location[定位]等环境), 放置在 环境之外的指令被认为是位于主环境中的,events环境和http环境也是放置在主环境中的,而server环境放置在http环境里面,location环境放置在server环境里面。
server环境:
在配置文件中添加一个server配置便代表一个服务功能,或说服务器。该服务器有特定的监听端口,名称。多个server环境互不影响。一个Nginx服务器中可以配置多个服务器,例如:1.1 静态服务器,用于html静态网页的浏览。
1.2 代理服务器,用于转发请求至其他服务器,并将响应回传给客户端。
1.3 邮件服务器,用于转发邮件。
例如:
#主环境
simple_directives1 params1; #简单指令
simple_directives2 params2; #简单指令
simple_directives3 params3; #简单指令
http { #http环境
server { #server环境
location { #location环境
simple_directives4 params4; #简单指令
simple_directives5 params5; #简单指令
simple_directives6 params6; #简单指令
}
}
}
events { #events环境
}
静态服务器环境配置
对外提供的文件(例如:图片,html静态网页,css样式表, js脚本等文件)的网站服务器是nginx中非常重要的一部分。
下面进行一个实验,根据请求,访问放置在本地目录/data/www/和/data/images下的文件。
这个实验将编辑nginx的配置文件/etc/nginx/nginx.conf,并设置http环境内的server环境的location环境:
- 首先创建/data/www和/data/images目录,放一个index.html文件到/var/www目录,放一些图片到/data/images目录下。
- 打开默认配置文件/etc/nginx.conf。默认配置文件已经包含很多被注释的server环境的例子。把所有类似于下面的环境都注释掉,并添加一个如下所示的新的环境:
http {
server {
}
}
3. 通常来说,一个配置文件可能包含多个server块,这些server块由监听端口port和名称servername区分开来。一旦nginx决定哪个server块处理请求,它会根据server中定义的location块的参数测试uri。所以在上面定义的http->server块中添加localtion块。如下所示:
location / {
root /data/www;
}
这个location块指定”/”前缀和请求中的URI进行比较。
当匹配到时,URI就会被添加到root指令的值后面,形成的路径将请求本地文件系统上的文件。
如果有多个匹配的location块,nginx选择一个最长的前缀。
上面的例子中的前缀最短,长度只有1,所以只有在找不到任何location匹配的时候才会使用这个location。
- 添加第二个location块
location /images/ {
root /data;
}
这个location(定位)块将匹配URI请求中的 /images/(这个URI同样匹配 [location /]块, 但是这个请求太短了)。
最终的配置为:
http {
server {
# /data/www
location / {
root /data/www;
}
# /data/images
location /images/ {
root /data;
}
}
}
这是一个已经可以正常运行的配置。该配置下的nginx服务器监听端口80,可以通过http://localhost/ 访问本地的/data/www/目录下的index.html文件。
- 重新加载配置:
nginx -s reload
提示:当nginx没有按预期执行,可以尝试在/user/local/nginx/logs/或者/var/log/nginx/目录下的access.log 和error.log中文件中查找原因
建立一个简单的代理服务器
nginx服务器最频繁使用的功能之一是代理服务。这表示当nginx服务器接受到一个请求时,
会将请求传递给代理服务器后,获取代理服务器的响应,并回送给客户端。
接下来我们给Nginx配置一个最简单的代理服务。该配置下的nginx提供图片或者文件的请求的
服务,将其他请求发送给代理服务器。下面这个例子中,两个服务都定义在一个Nginx服务器上。
- 配置一个服务器。
server {
listen 8080;
root /data/upl;
location / {
}
}
这个server环境配置了一个监听8080端口,并将所有请求映射到本地目录/data/upl下的服务器。
注意:这个root指令并不在location中。当server环境下的location被选中为一个请求服务,
并且这个location并不包含自己的root指令时,使用server环境中的root代替。
2. 创建/data/upl目录,并在其中放置一个index.html文件。
3. 使用上一节中的服务器配置,修改并添加下面的配置,使其成为代理服务器配置。
server {
location / {
proxy_pass http://localhost:8080
}
location /images/ {
root /data;
}
}
- 接下来我们修改上面server环境中的第二个location配置。当前,这个location配置映射请求中的 /images/ 前缀为 /data/images/ 目录。现在我们修改它,使他匹配 一个请求各类图片(后缀名不同)的请求。
location ~ \.(gif|jpg|png)$ {
root /data/images;
}
这个location环境的参数是一个匹配所有以 .git, .jpg 或 .png 结尾的URI表达式。
正则表达式应该领先于 ~ 符号。对应的请求将被映射到 /data/images/ 目录。
当nginx选择一个location环境服务一个请求时,它首先检查所有location环境的指定前缀,
记住其中最长的前缀,并使用正则表达式检验请求是否和前缀匹配。
如果匹配,nginx将选择这个location环境,否则nginx将选择上一个记住的location环境,以此循环。
直到寻找到匹配的Location环境。
- 代理服务的最终配置如下所示:
server {
location / {
proxy_pass http://localhost:8080;
}
location ~ \.(gif|jpg|png)$ {
root /data/images;
}
}
这个服务将会过滤所有以 .gif, .jpg 或 .png 结尾的请求,将其映射到目录 /data/images/ 目录下。并将所有其他的请求转送到上面配置的代理服务器。
nginx -s reload 重新加载配置
还有更多的用于配置代理链接的指令
设置 FastCGI proxy
nginx可用来将请求发送到FastCGI服务器,FastCGI服务器是由各种编程语言(PHP)和框架构建的运行程序。
几乎所有配置了FastCGI服务器的nginx配置都使用fastcgi_pass指令代替proxy_pass指令,
并且fastcgi_pass指令设置了发送到FastCGI服务的参数。
假设FastCGI服务器可以通过localhost:9000访问。
以上一节的配置为基础,将proxy_pass指令替换为fastcgi_pass指令,并将参数改为 localhost:9000。
在PHP中,SCRIPT_FILENAME参数用于确定脚本的名称,而QUERY_STRING 参数用于传递请求参数。最终的配置:
http {
server {
location / {
fastcgi_pass localhost:9000;
fastcgi_pass SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass QUERY_STRING $query_string;
}
location ~ \.(git|png|jpg) {
root /data/images;
}
}
}
这个配置将建立一个FastCGI服务。这个服务器将通过FastCGI协议发送除了与/images/匹配的 所有之外的所有请求到localhost:9000。
vimwiki静态文件部署
修改配置文件如下所示
http {
# js文件识别
include /etc/nginx/mime.types;
server {
listen 8080;
location / {
root /home/suchp/suchp_familly/yum/log/vimwiki/html;
}
location /suchptemplate/ {
root /home/suchp/suchp_familly/yum/log/vimwiki;
}
}
server {
# 默认80端口
location / {
proxy_pass http://localhost:8080;
}
location /images/ {
root /home/suchp/suchp_familly/yum/log/vimwiki;
}
}
}
events {
▸ worker_connections 768;
▸ # multi_accept on;
}