zoukankan      html  css  js  c++  java
  • nginx配置web服务器

    一:设置虚拟服务器

    1.设置

    http {
        server {
        listen 127.0.0.1:8080;
        
    server_name example.org www.example.org;
      } 
    }

    2.解释

      如果有多个服务器与请求的IP地址和端口相匹配,则NGINX将根据服务器块中的server_name指令测试请求的主机头域。

       server_name的参数可以是完整(精确)名称,通配符或正则表达式。 通配符是一个字符串,其开头,结尾或两者都包含星号(*); 星号匹配任何字符序列。 NGINX将Perl语法用于正则表达式; 在它们之前使用波浪号()。

      也就是,server_name下都会访问上面的IP与端口。

      如果匹配主机头几个名称,则NGINX通过按以下顺序搜索名称并使用其找到的第一个匹配来选择一个:

    1. 确切的名字(完整准确的名称)
    2. 以星号开头的最长通配符,例如:*.example.org
    3. 以星号结尾的最长通配符,如:mail.*
    4. 第一个匹配正则表达式(按照出现在配置文件中的顺序)

    如果主机头字段与服务器名称不匹配,则NGINX会将请求路由到请求到达端口的默认服务器。 默认服务器是nginx.conf文件中列出的第一个服务器

    3.一个完整的例子

      演示配置两个虚拟机,对应域名分别为:vhost1.com 和 vhost2.com。

      vhost1.com网站的主目录在/data/www/vhost1。

      vhost2.com网站的主目录在/data/www/vhost2。

    4.conf

    server {
        listen       80;
        server_name vhost1.com www.vhost1.com;
        index index.html index.html;
        root  /data/www/vhost1;
        access_log  /var/log/vhost1.com.log;
    }
    
    server {
        listen       80;
        server_name vhost2.com www.vhost2.com;
        index index.html index.html;
        root  /data/www/vhost2;
        access_log  /var/log/vhost2.com.log;
    }

    二:设置位置

    1.解释

      NGINX可以根据请求URI向不同的代理发送流量或提供不同的文件。 这些块是使用放置在server指令中的location指令来定义的。

      location指令有两种类型的参数:前缀字符串(路径名)和正则表达式。 对于要匹配前缀字符串的请求URI,必须以前缀字符串开头。

    2.举例

      正则表达式之前是区分大小写匹配的波形符号(~),或者不区分大小写匹配的波形符号(~*)。

      以下示例将包含字符串.html.html的URI与任何位置相匹配。

       location ~ .html? {
           ...
       }

      使用^~修饰符对正则表达式给予更高的优先级

    3. 下面给出了选择处理请求的位置的确切逻辑

    1. 测试所有URI的前缀字符串。
    2. =(等号)修饰符定义了URI和前缀字符串完全匹配。如果找到完全匹配,则搜索停止。
    3. 如果^~(插入符号)修饰符预先添加最长匹配前缀字符串,则不会检查正则表达式。
    4. 存储最长匹配的前缀字符串。
    5. 根据正则表达式测试URI。
    6. 断开第一个匹配的正则表达式并使用相应的位置。
    7. 如果没有正则表达式匹配,则使用与存储的前缀字符串相对应的位置。

      =修饰符的典型用例是/(正斜杠)的请求。 如果请求/是频繁的,则指定=/作为location指令的参数加速处理,因为搜索匹配在第一次比较之后停止。

    三:返回特定状态码

    1.一些网站URI需要立即返回具有特定错误或重定向代码的响应

      未找到状态码:

      location /wrong/url {
          return 404;
      }

    2.细节

      返回的第一个参数是响应代码。可选的第二个参数可以是重定向的URL(代码301,302,303307)或在响应体中返回文本。

      location /permanently/moved/url {
          return 301 http://www.example.com/moved/here;
      }

    四:重写URL请求

    1.rewrite指令

      在请求处理期间多次修改请求URI,该指令具有一个可选参数和两个必需参数。

      第一个(必需)参数是请求URI必须匹配的正则表达式。

      第二个参数是用于替换匹配URI的URI。

      可选的第三个参数是可以停止进一步重写指令的处理或发送重定向(代码301302)的标志

      location /users/ {
          rewrite ^/users/(.*)$ /show?user=$1 break;
      }

    2.与返回指令相结合的rewrite

      server {
          ...
          rewrite ^(/download/.*)/media/(.*)..*$ $1/mp3/$2.mp3 last;
          rewrite ^(/download/.*)/audio/(.*)..*$ $1/mp3/$2.ra  last;
          return  403;
          ...
      }

    3.中断处理指令

    • last - 停止执行当前服务器或位置上下文中的重写指令,但是NGINX会搜索与重写的URI匹配的位置,并且应用新位置中的任何重写指令(URI可以再次更改,往下继续匹配)。
    • break - 像break指令一样,在当前上下文中停止处理重写指令,并取消搜索与新URI匹配的位置。新位置(location)块中的rewrite指令不执行。

    五:重新http请求

    1.解释

      有时您需要重写或更改HTTP响应中的内容,将一个字符串替换为另一个字符串。

      您可以使用sub_filter指令来定义要应用的重写。 该指令支持变量和替代链,使更复杂的更改成为可能 

      location / {
          sub_filter      /blog/ /blog-staging/;
          sub_filter_once off;
      }

    2.sub_filter_once指令

      告诉NGINX在一个位置(location)内连续应用sub_filter伪指令

      location / {
          sub_filter     'href="http://127.0.0.1:8080/'    'href="http://$host/';
          sub_filter     'img src="http://127.0.0.1:8080/' 'img src="http://$host/';
          sub_filter_once on;
      }
     如果发生另一个sub_filter匹配,则使用sub_filter修改的响应部分将不再被替换。

    3.error_page指令 

       error_page 404 /404.html;

      指定要返回404页面错误代码的页面(/404.html)。

      当NGINX找不到页面时,它会将代码301替换为代码404,并将客户端重定向到http:/example.com/new/path.html

      location /old/path.html {
          error_page 404 =301 http:/example.com/new/path.html;
      }
     
  • 相关阅读:
    Zjnu Stadium(hdu3047带权并查集)
    cocos2d-x结合cocosbuilder,不同屏幕适配小结
    分布式爬虫系统设计、实现与实战:爬取京东、苏宁易购全网手机商品数据+MySQL、HBase存储
    Generating RSA keys in PKCS#1 format in Java--转
    nodejs安装node-rsa遇到的问题及解决
    spring-redis-data的一个坑
    node-rsa加密,java解密调试
    MySQL 四种事务隔离级别详解及对比--转
    从实际案例聊聊Java应用的GC优化--转
    动态可缓存的内容管理系统(CMS)
  • 原文地址:https://www.cnblogs.com/juncaoit/p/7474291.html
Copyright © 2011-2022 走看看