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;
}