标签: Nginx

  • 安装 Nginx、Lua,使用 Lua 扩展 Nginx

    使用 lua-nginx-module 可以让 Nginx 通过一些指令如 content_by_lua、content_by_lua_file 运行 Lua 脚本,非常方便。

    先下载所需文件

    1. 安装 luajit,官网 http://luajit.org/install.html

    解压之后直接 make

    make PREFIX=/usr/local/luajit
    

    2. 下载 ngx_devel_kit(github)、nginx_lua_module(github

    3. 进入 nginx 源码目录准备 configure

    如果已经安装 nginx,也可以再次 configure,但一定要涵盖上次使用的参数。

    4. 导出 LUAJIT_LIB、LUAJIT_INC 环境变量

    export LUAJIT_LIB=/usr/local/luajit/lib
    export LUAJIT_INC=/usr/local/luajit/include/luajit-2.0
    
    LUAJIT_LIB 对应 libluajit-5.1.so 文件所在目录
    LUAJIT_INC 对应 lua.h 文件所在目录
    

    目录可能不一样,但参考 LUAJIT_LIB、LUAJIT_INC 含义。

    5. 在 nginx-1.10.2 目录执行 ./configure

    ./configure \
    --prefix=/usr/local/nginx \
    --with-http_flv_module \
    --with-http_gzip_static_module \
    --with-http_realip_module \
    --with-http_ssl_module \
    --with-http_stub_status_module \
    --with-http_v2_module \
    --with-ipv6 \
    --with-ld-opt="-ljemalloc,-Wl,-rpath,/usr/local/luajit/lib" \
    --with-openssl=/opt/src/openssl-1.0.2l \
    --with-pcre=/opt/src/pcre-8.40 \
    --with-pcre-jit \
    --add-module=/opt/src/ngx_devel_kit-0.3.0 \
    --add-module=/opt/src/lua-nginx-module-0.10.8
    

    这里用到了 ljemalloc、openssl、pcre 可以预先安装

    安装 jemalloc,进入 jemalloc-4.2.1
    
    ./configure
    make
    make install
    
    安装 openssl pcre,或者进入源码目录安装
    
    yum install openssl openssl-devel
    yum install pcre pcre-devel
    

    6. 测试执行 lua

    在 Nginx 某个 server 下增加

    location /hello { 
        content_by_lua 'ngx.say("Hello, Lua")'; 
    }
    

    尝试访问

    [root@CentOS-58 06]# curl lua.zhengxianjun.com/hello
    Hello, Lua!
    

    安装成功并且正常运行。

    如果对 nginx 安装目录进行版本管理,会发现 make install 完成之后只有 nginx/sbin/nginx 文件有改动。

    安装完成之后切记要执行 sbin/ngxin -t 检查语法是否正确。
    一定要安装正确才能执行 sbin/ngxin -s reload 。

    因为对于已经安装的 nginx,如果 ./configure 没有覆盖上一次的参数,会导致某些功能失效。
    第一次 configure 时没有添加 –with-http_ssl_module 导致 nginx 提示 unknown directive “ssl”。

  • 解析中文域名并配置 Nginx 服务器

    部署中文域名站点,下面讲诉设置中文域名站点——“郝越.我爱你”。

    设置域名解析

    第一步是在设置域名 A 记录,使主机记录中的 @ 和 www 都指向一个 ip。

    域名解析

    上图为万网域名解析后台解析设置

    设置 Nginx server_name

    第二步是修改 nginx/conf/nginx.conf 或者其他 vhost 文件,在 server_name 这一行调整为经过 idn_to_ascii 函数编码的中文域名,而不是原始的中文域名。

    server {
    		listen       80;
    		server_name  xn--vq3al9d.xn--6qq986b3xl;
    		index index.php;
    		root /alidata/www/love;
    }
    

    “郝越.我爱你”经过编码之后是“xn--vq3al9d.xn--6qq986b3xl”。

    在百度搜索“中文域名编码”,进入在线编码的网站,提交中文域名,即可将中文域名转为 punycode 或者是 GBK 编码。在 nginx 配置文件中使用 punycode 即可。

    设置完成之后 reload nginx,即可访问中文域名。

    访问中文域名

    在浏览器地址栏看到的虽然是中文域名,但实际的链接是 http://xn--vq3al9d.xn--6qq986b3xl 。通过 JavaScript document.domain 获取到的域名也是 “xn--vq3al9d.xn--6qq986b3xl”,两者其实是同一个,通过任何一个地址都能访问到服务器。

    扩展:使用 PHP 进行中文域名编码