nginx

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)