ubuntu上配置nginx

nginx安装好的文件位置:

/usr/sbin/nginx:主程序
/etc/nginx:存放配置文件
/usr/share/nginx:存放静态文件
/var/log/nginx:存放日志

如果忘记nginx的配置文件位置,可以用nginx -t命令查看,显示如下:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

其实从上面的根目录文件夹可以知道,Linux系统的配置文件一般放在/etc,日志一般放在/var/log,运行的程序一般放在/usr/sbin或者/usr/bin。

nginx 有一个主进程和几个工作进程,主进程的作用是读取配置文件,管理工作进程,工作进程做真正的处理请求。nginx 采用event-based 模型和OS-dependent机制更有效地把请求分发给各个工作进程。工作进程的数量已经在配置文件中定义,可以是固定的数目也可以根据CPU核的数量动态地调整。
nginx和各个模块的工作方式都已经在配置文件中定义。默认情况下文件的名称是nginx.conf.

配置文件的结构

nginx各个模块都是通过指定的配置文件进行控制的。
指令可以是单独的指令,也可以是块指令,单独的指令相当于一条语句,包含指令的名称,和参数之间通过空格断开,指令的最后用分号结束。块指令和单独的指令有相同的语法结构,除了块指令是用一系列的{}来表示结尾。块指令里面的指令称之为内容,比如(events, http, server location).
在配置文件中,如果指令在所有的指令之外称这个指令为主指令,events 和http就是主指令,server在http之内,locaton在server之内。
其余的以#开头的指令都是注释的内容。

静态内容服务

服务器的一个重要功能就是静态网络服务比如图片和静态的html网页。下面是一个实例,取决于需求,文件可以放置在不同的目录中,比如/data/www/(包含着html文件)以及/data/images/(包含图片)。这需要编辑配置文件,在http指令中包含server指令然后包含两个location位置。
第一步是创建一个sample.html的网页文件放到/dada/www目录中,然后在/data/images/目录中放置一些图片
下面是一个最简单的html示例

<html>  
<head></head>  
<body>hello</body>  
</html>  

接下来是打开配置文件,默认的配置文件已经有些服务器指令实例,绝大部分都需要注释掉它们。
先注释掉所有的指令,写上如下指令块
按照刚刚解释的内容

http {  
     server {  
     }  
}  

通常来说配置文件可以很多的server块指令,每个server都是通过监听的端口号区别开。一旦nginx决定是哪个server处理请求,它就会打开location中的相对应的文件夹来获取URI指定的内容。
在location块指令中增加如下内容

location / {  
    root /data/www;  
}  

这个位置会和前面的指定的URI相比对,URI会加上root指令内的路径,也就是/data/www,去组成需要文件的路径。如果这里有好几个同时满足location位置的路径,location会提供最短路径的那个,如果其它的路径都不能够提供相对应的文件。
现在增加第二个locaiton指令

location /images/ {  
    root /data;  
}  

它需要请求路径中包含/images/,前面说道的 / 也是满足要求的,在这个路径不满足的情况下,会使用 / 路径。
下面是一个完整的html配置文件

http {  
    server / {  
        root /data/www;  
    }  
    server /images/ {  
        root /data;  
    }  
}  

这个配置文件会监听标准的80端口,可以通过http://localhost/进行访问。如果一个URI请求以/images/开头,那么这个server指令就会发送/data/images目录下的文件,比如回应http://localhost/images/example.png,nginx服务器会发送/data/images/example.png文件。如果这个文件不存在,nginx会提醒404错误。不是以/images开头的URI请求会被映射到/data/www目录中。比如URI地址是http://localhost/some/examples.html,服务器会发送/data/www/some/examples.html文件。
需要配置重新生效,需要执行下面的指令nginx -s reload
在一些条件下服务器可能没有像上述描述的工作,你可以检查access.log或者error.log文件,通常是在/usr/local/nginx/logs/或者/var/log/nginx目录下。

建立简单的代理服务器(proxy server)

nginx服务起还有一个经常被使用的用途是当做代理服务器,代理服务器的意思是指一个服务起接收到请求,然后把这个请求传递给受理服务器(proxied servers)处理,然后从受理服务器中得到相应的回应发送给请求对象。
下面会配置一个基本的代理服务器,这个服务器的作用是对于图片请求会直接在本地进行处理,其它的请求都会发送个给受理服务器进行处理。在这个例子中,两个server都定义在一个nginx实例中。
首先,定义一个受理服务器,在nginx配置文件中加入一个server块指令

server {  
    listen 8080;  
    root /data/up1;  
  
    location / {  
    }  
}  

这个简单的服务器指令配置监听8080端口(之前的服务器端口没有指定是因为已经默认配置了标准的80端口),对于所有的请求都会用本地的/data/up1目录。
创建这个文件,然后放置一个index.html文件到其中。注意root指令放置在server指令中,在location中没有包含自己的root指令的时候这个server的root指令就会被location指令使用。

下一步使用之前已经学习的服务器配置,修改它让它成为一个代理服务器。在location块指令中,放置一个proxy_pass指令,名字 受理服务器指定的端口号,,这里使用(http://localhost:8080):

server {  
    location / {  
        proxy_pass http://localhost:8080;  
    }  
    locaiton /images/ {  
        root /data;  
    }  
}  

接着我们修改上面第二个的location块指令,它会把所有/images/前缀的请求映射到服务器的/data/images/目录下,为了是它能够只响应指定文件的请求,需要更改location块指令:

location ~ \.(gif|jpg|png)$ {  
    root /data/images;  
}  

这个参数是一个正则表达式,对应所有的以.gif .jpg .png结尾的URI请求。一个正则表达式应该以~开头。对应的请求会被映射到/data/images目录下。
nginx服务器在处理用户请求的时候,首先会检查有特殊前缀的location指令,记住最长的location指令的前缀,然后再检查正则表达式。如果这里有一个合乎要求的的正则表达式,nginx会选择这个location指令,如果没有则会选择之前的。

下面是一个代理服务器的配置

server {  
    location / {  
        proxy_pass http://localhost:8080/;  
    }  
    location ~ \.(gif|jpg|png)$ {  
        root /data/images;  
    }  
}  

这个服务器会过滤出所有以.gif .jpg .png结尾的请求,然后把它们映射到/data/images目录下(URI地址加上root指令的参数),会把其它的所有的请求发送到上述配置的受理服务器中。
为了使新的配置生效,需要发送reload信号给nginx服务器。

设置快速FastCGI代理

nginx可以把请求路由到FastCGI服务器中,FastCGI服务器里可以有各种架构以及使用各种编程语言比如php。

最简单的FastCGI配置是讲proxy_pass指令改成fastcgi_pass指令,fastcgi_param指令将请求传递给FastCGI服务器。假设一个FastCGI服务起可以通过localhost:9000端口访问,以之前配置代理服务器为基础,可以将配置文件写成下面这个样子。

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服务器中。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Nginx简介 解决基于进程模型产生的C10K问题,请求时即使无状态连接如web服务都无法达到并发响应量级一万的现...
    魏镇坪阅读 2,114评论 0 9
  • 《老男孩Linux运维》笔记 隐藏Nginx软件版本号 一般来说,软件的漏洞都和版本有关。因此要尽量隐藏对访问用户...
    Zhang21阅读 3,738评论 0 28
  • 1.简介:  Nginx:engine X ,2002年,开源,商业版 http协议:web服务器(类似于ht...
    尛尛大尹阅读 1,906评论 0 3
  • I/O模型Nginx介绍Nginx的安装和目录结构Nginx的配置Nginx的编译安装 一、I/O模型 (一)I/...
    哈喽别样阅读 921评论 0 4
  • 小豆豆的外婆矮矮的,瘦瘦的。 但是她有一双特别有力的手,能打柴,能割草,能插秧,能做饭,还能……打小豆豆的屁股。 ...
    我是一个圈1314阅读 598评论 4 2