关于nginx配置

来源:互联网 发布:电脑网络摄像头 编辑:程序博客网 时间:2024/06/05 04:50

提供静态内容服务

通常,配置文件可以包括服务器监听的端口和服务器名称区分的几个server块。当nginx决定哪个服务器处理请求后,它会根据服务器块内部定义的location指令的参数测试请求头中指定的URI。

将以下location块添加到服务器(server)块:

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

该location块指定与请求中的URI相比较的“/”前缀。 对于匹配请求,URI将被添加到root指令中指定的路径(即/data/www),以形成本地文件系统上所请求文件的路径。 如果有几个匹配的location块,nginx将选择具有最长前缀来匹配location块。 上面的location块提供最短的前缀长度为1,因此只有当所有其他location块不能提供匹配时,才会使用该块。

接下来,添加第二个location块:

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

它将是以/images/(位置/也匹配这样的请求,但具有较短前缀,也就是“/images/”比“/”长)的请求来匹配。

server块的最终配置应如下所示:

server {    root /www/data;    location / {    }    location /images/ {    }    //以mp3或者mp4结尾会定向到/www/media    location ~ \.(mp3|mp4) {        root /www/media;    }}

设置简单的代理服务器

nginx的一个常见用途是将其设置为代理服务器,这意味着它可作为一个接收请求的服务器,将其传递给代理服务器,从代理服务器中检索响应,并将其发送给客户端。

我们将配置一个基本的代理服务器,它为来自本地目录的文件提供图像请求,并将所有其他请求发送到代理的服务器。 在此示例中,两个服务器将在单个nginx实例上定义。

首先,通过向nginx配置文件添加一个server块来定义代理服务器,其中包含以下内容:

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

接下来,使用上一节中的服务器配置进行修改,使其成为代理服务器配置。 在第一个位置块中,将proxy_pass指令与参数中指定的代理服务器的协议,名称和端口(在本例中为http://localhost:8080):

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

完整的配置nginx.conf文件内容如下

#user  nobody;worker_processes  1;#error_log  logs/error.log;#error_log  logs/error.log  notice;#error_log  logs/error.log  info;#pid        logs/nginx.pid;events {    worker_connections  1024;}http {    include       mime.types;    default_type  application/octet-stream;    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '    #                  '$status $body_bytes_sent "$http_referer" '    #                  '"$http_user_agent" "$http_x_forwarded_for"';    #access_log  logs/access.log  main;    sendfile        on;    #tcp_nopush     on;    #keepalive_timeout  0;    keepalive_timeout  65;    #gzip  on;    ## 新服务(服务处理)    server {        listen 8080;        root /data/up1;        location / {        }    }    ## 代理配置,数据转发    server {        location / {            proxy_pass http://localhost:8080/;        }        location ~ \.(gif|jpg|png)$ {            root /data/images;        }    }}

将请求传递给代理的服务器

当NGINX代理请求时,它将请求发送到指定的代理服务器,获取响应,并将其发送回客户端。 可以使用指定的协议将请求代理到HTTP服务器(另一个NGINX服务器或任何其他服务器)或非HTTP服务器(可以运行使用特定框架开发的应用程序,如PHP或Python)。 支持的协议包括FastCGI,uwsgi,SCGI和memcached。

要将请求传递给HTTP代理服务器,则在一个location块内指定proxy_pass指令。 例如:

location /some/path/ {    proxy_set_header Host $host;    proxy_set_header X-Real-IP $remote_addr;    proxy_pass http://localhost:8000;}

配置缓冲区

默认情况下,NGINX缓存来自代理服务器的响应。 响应存储在内部缓冲区中,并且不会发送到客户端,直到收到整个响应。 缓冲有助于通过慢客户端优化性能,如果响应从NGINX同步传递到客户端,这可能会浪费代理服务器时间。 然而,当启用缓冲时,NGINX允许代理服务器快速处理响应,而NGINX存储响应时间与客户端需要下载的时间一样长。 负责启用和禁用缓冲的指令是proxy_buffering。 默认情况下,它被设置为开启且缓冲已启用。 proxy_buffers指令控制分配给请求的缓冲区的大小和数量。 来自代理服务器的响应的第一部分存储在单独的缓冲区中,其大小由proxy_buffer_size指令设置。 这部分通常包含一个比较小的响应头,并且可以比其余的响应的缓冲区小。 在以下示例中,缓冲区的默认数量增加,并且响应的第一部分的缓冲区的大小小于默认值。

location /some/path/ {    <!--proxy_buffering off;-->禁用此功能    proxy_buffers 16 4k;    proxy_buffer_size 2k;    proxy_pass http://localhost:8000;}

选择传出IP地址

如果您的代理服务器有多个网络接口,有时您可能需要选择特定的源IP地址才能连接到代理服务器或上游。 如果NGINX后端的代理服务器只配置为接受来自特定IP网络或IP地址范围的连接,在这种情况下,这个配置选项就很有用。

指定proxy_bind指令和必要网络接口的IP地址:

location /app1/ {    proxy_bind 127.0.0.1;    proxy_pass http://example.com/app1/;}location /app2/ {    proxy_bind 127.0.0.2;    proxy_pass http://example.com/app2/;}