存档

2018年6月 的存档

nginx跨域设置

2018年6月27日 没有评论

跨域问题在现在前后端分离的项目中是一个很常见的问题,以前我写过一篇《nginx反向代理解决跨域问题》的文章。前段时间在做nginx配置允许跨域时一直失败,参考的是segmentflaut上面的一篇文章,尝试了许久都没有成功,搞的我都有点开始怀疑人生了。

后来我去查看了一下nginx官方add_header的文档,发现它教程中放在location块中是没有问题的,add_header支持放在”httpserverlocationif in location“,也就是不仅可以放在location中,也可以放在location中的if块里面。那么到底哪里出了问题哪?

在一篇叫《Using CORS》文章中,作者提到”Access-Control-Allow-Origin (required) – This header must be included in all valid CORS responses。”,也就是说我们必须要保证所有cors请求都要返回我们设置的header,而”location /”是一个默认的匹配块,如果匹配到其他块,那么 我们设置在location中的跨域header设置就会无效了,于是就做了下面的改动。

在nginx配置文件下面增加cors.conf配置文件,内容如下:

add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';

if ($request_method = 'OPTIONS') {
    return 204;
}

然后在server块中include进来跨域配置文件:

location / {
       index  index.html index.htm index.php;
       autoindex on;
       try_files $uri $uri/ /index.php?$query_string;
}

include cors.conf;

这样在其他的网站配置文件中只需要 “include cors.conf”即可。当然如果你也可以直接用cors.conf配置文件里面的内容替换”include cors.conf”。重启nginx,就成功可以让js跨域请求了啊!

mac安装openresty

2018年6月12日 没有评论

OpenResty( 也称为 ngx_openresty) 是一个全功能的 Web 应用服务器。它打包了标准的Nginx 核心,很多的常用的第三方模块,以及它们的大多数依赖项。通过揉和众多设计良好的 Nginx 模块,OpenResty 有效地把 Nginx 服务器转变为一个强大的Web 应用服务器,基于它开发人员可以使用 Lua 编程语言对 Nginx 核心以及现有的各种Nginx C 模块进行脚本编程,构建出可以处理一万以上并发请求的极端高性能的 Web 应用。OpenResty 致力于将你的服务器端应用完全运行于 Nginx 服务器中,充分利用 Nginx 的事件模型来进行非阻塞 I/O 通信。不仅仅是和 HTTP 客户端间的网络通信是非阻塞的,与MySQL、PostgreSQL、Memcached 以及 Redis 等众多远方后端之间的网络通信也是非阻塞的。

Brew安装

brew tap homebrew/nginx
brew install homebrew/nginx/openresty

这是官方给的通过brew方式安装的方法,可惜我没有安装成功。

编译安装

利用brew安装openresty依赖。

brew update
brew install pcre openssl curl

下载openresty源码,然后解压编译安装。

./configure --prefix=/usr/local/opt/openresty \
--with-cc-opt="-I/usr/local/opt/openssl/include/ -I/usr/local/opt/pcre/include/" \
--with-luajit \
--without-http_redis2_module \
--with-ld-opt="-L/usr/local/opt/openssl/lib/ -L/usr/local/opt/pcre/lib/"
make -j2
sudo make install

我在安装的时候最开始没有用 “–with-cc-opt”来新增openssl和pcre头文件的位置,导致在make阶段总是报错,提示找不到”ssl.h”头文件。

openresty的nginx文件在/usr/local/opt/openresty/nginx/sbin/nginx,如果你没有安装其他版本的nginx,可以将/usr/local/opt/openresty/nginx/sbin/加入path目录,就可以使用nginx命令了。如果之前已有安装其他版本的nginx,就不建议在将openresty中nginx的sbin目录加入到PATH中,可以给openresty内置的nginx起个别名,方便以后使用。

export PATH=$PATH:/usr/local/opt/openresty/nginx/sbin
alias nginx_lua="/usr/local/opt/openresty/nginx/sbin/nginx"

 

 

分类: Mac, nginx 标签: ,