nginx

作者: fastwe | 来源:发表于2018-11-28 21:22 被阅读0次

    Windows环境************************************************************************************

    Nginx可以静态页面的服务器、静态文件缓存服务器、网站反向代理、负载均衡服务器等,只需要修改配置文件即可

    反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器

    ① 下载nginx

    http://nginx.org/en/download.html                //官网下载地址

    Mainline version 主版本

    Stable version 稳定版本

    可选择任意版本(如: nginx/Windows-1.13.6)下载(*.gz是Linux系统压缩包,*.zip是Windows系统压缩包)

    ② 解压缩nginx到自定义目录(如nginx)中

    ③ nginx cmd命令

     start nginx        //启动nginx

     nginx -s stop      //快速停止nginx,可能不保存相关信息,并迅速结束web服务

     nginx -s reload    //因改变了nginx相关配置,重新加载配置而重载

     nginx -s quit     //平稳关闭nginx,保存相关信息,有安排的结束web服务

      nginx -t           //检查配置文件是否正确

      nginx -s reopen    //重新打开日志文件

      nginx -v           //查看nginx版本号

    ④ 启动nginx,在浏览器地址栏输入127.0.0.1,显示nginx首页,即配置成功

       此时,nginx可作为静态资源服务器,html 文件夹即是web服务器文件夹

    ⑤ 配置反向代理

    conf/nginx.conf:

    http {

      server {

        listen 80;                #监听端口

        server_name localhost;    #指定访问的域名

        #charset koi8-r;

        #access_log logs/host.access.log main;

        location / {

          root html;                     #文件根目录

          index index.html index.htm;    #默认起始页

        }

        location/apis{                       #apis: 配置自定义api请求地址

          rewrite ^.+apis/?(.*)$ /$1 break;    #apis: 配置的api请求地址

          include uwsgi_params;

          proxy_pass http://m.baibaocp.cn;     #真正的api地址(即要访问的资源地址)

        }

      }

    }

    前端的 js (使用jQuery):

    $.ajax({

    url: "/apis/plsw/Tablenew?num=60&tag=1&omit=1",        // apis: 配置的api请求地址

      success: function(data){ }

    });

    将此文件放在 html 文件夹下,使用127.0.0.1的IP地址即可跨域访问设置的真正的api地址

    ⑥ nginx配置CORS,让不在html文件夹下的文件也能跨域

    一、简单配置

    conf/nginx.conf:

    location/apis{        #需要访问的nginx的api请求地址

      add_header 'Access-Control-Allow-Origin' 'https://a.com';    #授权a.com可以请求

                                                                    也可设置为通配符*

      add_header 'Access-Control-Allow-Credentials' 'true';        #该请求是否可以被暴露

      add_header 'Access-Control-Allow-Methods' 'GET';             #指定请求的方法,可以是GET、POST、PUT、DELETE、HEAD,也可设置为通配符*

      ...              #其它配置指令

    }

    location/apis{

     add_header 'Access-Control-Allow-Origin' '*';       #设置为允许任何域的请求

      ...

    }

    前端的任意文件下的 js (使用jQuery):

    $.ajax({

      url: "http://127.0.0.1/apis/plsw/Tablenew?num=60&tag=1&omit=1",    //nginx地址+定义的api

      url: "http://192.168.1.175本机IP地址/apis/plsw/Tablenew?num=60&tag=1&omit=1",

      success: function(data){

        if(typeof data != 'object'){        //判断是不是对象,是否需要从json转换为对象

          var data = $.parseJSON(data);

        }

        console.log(data);

      }

    });

    二、高级配置

    conf/nginx.conf:

    location / {

      if($request_method = 'OPTIONS') {

        add_header 'Access-Control-Allow-Origin' '*';

        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';

        add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';

        add_header 'Access-Control-Max-Age' 1728000;        #设置有效期

        add_header 'Content-Type' 'text/plain charset=UTF-8';

        add_header 'Content-Length' 0;

        return 204;

      }

      if($request_method = 'POST') {

        add_header 'Access-Control-Allow-Origin' '*';

        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';

        add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';

      }

      if($request_method = 'GET') {

        add_header 'Access-Control-Allow-Origin' '*';

        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';

        add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';

      }

      ...

    }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)${

      expires 30d;    #设置30天过期

    }

    location ~ .*\.(js|css)?${

      expires 1h;     #设置1小时过期

    }

    注意: nginx的每个指令必须有分号结束

          配置文件的使用 # 单行注释

          每次设置好配置文件后,都需要重新加载nginx的配置文件,或重启nginx

    _______________________________________________________________________________________________

    修改服务器的根目录:

    conf/nginx.conf:

    location / {

      root www/src;              #将原本的html根目录改为www/src,或E:\1webdev\hongdan\src

                                 #若以/开头,则从所在盘符的根目录开始查找

      index index.html index.htm;

    }

    conf/nginx.conf:

    nginx不允许向静态文件提交post方式的请求,否则会返回"HTTP/1.1 405 Method not allowed"错误

    解决方法: 重定向405错误码到200

    server{

      ...

      location ~ (.*\.json) {

        root  E:\1webdev;              #root为站点的根目录

        error_page405 =200 $1;        #空格不能错

      }

      ...

    }

    conf/nginx.conf:

    使用nginx架设服务器,向外部提供json数据(允许使用json格式的数据)

    location ~ (.*\.json) {

      add_header 'Access-Control-Allow-Origin' '*';    #使客户端可访问此接口

      root  E:\1webdev;                                #*.json文件放在此文件夹中

      error_page 405 =200 $1;

    }

    如提供的url: http://192.168.1.11/zjzh/syxw/html/001.json

    负载均衡***************************************************************************************

    公司会建立很多的服务器,这些服务器组成服务器集群,当用户访问网站时,先访问一个中间服务器,再让这个中间服务器在服务器集群中选择一个压力较小的服务器,然后将该访问请求引入选择的服务器,分担了服务器的压力,避免服务器崩溃

    conf/nginx.conf:

    worker_processes 1;               #工作进程数,和CPU核数相同

    events {

      worker_connections 1024;        #每个进程允许的最大连接数

    }

    http {

      upstream upstreamname {         #upstream模块,用于负载均衡,语法: upstream name {}

        ip_hash;                      #第一次访问该服务器后记录,之后再访问都是该服务器

        server 123.125.115.110;

        server 111.202.103.60;

      }

      server {                        #用于反向代理

        listen 80;

        location / {

          proxy_pass http://upstreamname;

        }

      }

    }

    nginx做反向代理时携带Cookie********************************************************************

    方法①

    location /m_bbcp{

      add_header  'Access-Control-Allow-Origin' '*';

      rewrite ^.+m_bbcp/?(.*)$ /$1 break;

      include uwsgi_params;

      proxy_set_header 'Cookie' 'PHPSESSID=ck4s7o2mjdihmd7gbv6g9cbdj0; f3df7bfcdf28dbdc9c124f886cf72fba=36fb49d8d5c4381b725b944771a53356925f3797a%3A4%3A%7Bi%3A0%3Bs%3A6%3A%22136682%22%3Bi%3A1%3Bs%3A0%3A%22%22%3Bi%3A2%3Bi%3A604800%3Bi%3A3%3Ba%3A0%3A%7B%7D%7D';                                  # 设置携带的Cookie

    proxy_passhttp://m.baibaocp.cn;# 真正的api地址(即要访问的资源地址)

    }

    方法②

    注意: 先在浏览器地址栏查看原本的接口是否需要跨域才能显示数据,并在$.ajax()中做出相应的更改

    反向代理到其它网站*****************************************************************************

    location / {                          # 需要在 / 配置,否则一些资源请求不到

      proxy_pass http://127.0.0.1:81/;    # 所有的请求都会由当前端口,转向81端口

    }

    server {                              # 添加多个服务器

      listen        8094;

      #listen       localhost:8094;

    server_namelocalhost  alias  another.alias;

      location / {

    proxy_passhttp://netease.zhongkezhihe.cn;  //当使用本机ip通过该端口时,

                                                      服务端会以此地址为准,客户端会以本机ip为准

      }

    }

    注意:

    ① 修改hosts也需要重启nginx

    ② 若指向的服务器有cookie信息用来判断域名,则需要清理cookie才能使服务器区分出不同的域名

    重定向******************************************************************************************

    将 / 重定向到 /home

    方法①

    location = / {

      return 301 /home;

    }

    方法②

    location / {

      rewrite ^/ /home permanent;

    }

    相关文章

      网友评论

          本文标题:nginx

          本文链接:https://www.haomeiwen.com/subject/mofcqqtx.html