您的位置:首页 > 运维架构 > Nginx

nginx 基础学习篇

2018-03-13 10:28 155 查看

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息