阿里云
发表主题 回复主题
  • 4608阅读
  • 8回复

[教程]Ubuntu 编译安装 OpenResty 及拓展支持

级别: 论坛版主
发帖
9333
云币
14095
— 本帖被 不靠谱贝贝 设置为精华(2017-06-21) —

介绍

教程修改日期:2017.06.11 Version 1.0-beta

本教程将介绍如何一步一步手动编译 OpenResty,OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台,拥有非常好的拓展性让服务发挥更好性能。教程中将全部依赖 Linux 发行版组建中的依赖,而免除编译带来的后期维护成本。

OpenResty 的额外拓展:

  1. OpenSSL 1.0.2,提供 ALPN 支持,支持 HTTP/2
  2. Nginx-CT,透明证书提高 HTTPS 网站安全性和浏览器支持
  3. ngx_PageSpeed,Google 家的网站性能优化工具
  4. Brotli,实现比 Gzip 更高的压缩率
  5. Jemalloc,优化内存管理

教程

  

本教程以,Ubuntu 16.04 LTS 64位版 为例。

设定版本变量

  

如果软件版本更新后,为了方便起见,后续修改版本号只需修改下面的变量即可。

在 SSH终端 中输入:

  1. # Version
  2. OpenSSLVersion='openssl-1.0.2l';
  3. NginxCTVersion='1.3.2';
  4. PageSpeedVersion='1.12.34.2';
  5. SystemBit='X64';
  6. OpenRestyVersion='openresty-1.11.2.3';

注: 截止本次更新,OpenResty 1.11.2 版本最高只能搭配 OpenSSL 1.0.2。

上述软件版本更新查看: OpenSSLNginx-CTPageSpeedOpenResty

安装依赖

更新系统软件源缓存顺便升级组件:

引用
apt update
引用
apt upgrade -y

安装依赖组件:

  1. apt install build-essential libreadline-dev libncurses5-dev libpcre3 libpcre3-dev libssl-dev zlib1g-dev unzip git perl make libjemalloc1 libjemalloc-dev

下载源码

这里将 OpenResty 所需的源代码均放置在 /root/src 目录下,方便管理。

  1. cd /root
  2. mkdir src
  3. cd src

下载 OpenResty 和其拓展的源代码:

  1. #下载 OpenSSL,Ubuntu 16.04(不包括)以下版本请删除下面的 # 以下载
  2. #wget https://www.openssl.org/source/$OpenSSLVersion.tar.gz
  3. #tar xzf $OpenSSLVersion.tar.gz
  4. wget https://github.com/grahamedgecombe/nginx-ct/archive/v$NginxCTVersion.tar.gz
  5. tar xzf v$NginxCTVersion.tar.gz
  6. git clone https://github.com/google/ngx_brotli.git
  7. cd ngx_brotli
  8. git submodule update --init
  9. cd ../
  10. wget https://github.com/pagespeed/ngx_pagespeed/archive/v$PageSpeedVersion-beta.zip
  11. unzip v$PageSpeedVersion-beta.zip
  12. cd ngx_pagespeed-$PageSpeedVersion-beta/
  13. wget https://dl.google.com/dl/page-speed/psol/$PageSpeedVersion-$SystemBit.tar.gz
  14. tar -xzvf $PageSpeedVersion-$SystemBit.tar.gz
  15. cd ../
  16. wget -c https://openresty.org/download/$OpenRestyVersion.tar.gz
  17. tar zxf $OpenRestyVersion.tar.gz

编译 OpenResty

  1. cd $OpenRestyVersion
  2. ./configure --prefix=/usr/local/openresty \
  3. --user=www-data --group=www-data \
  4. --add-module=../ngx_brotli \
  5. --add-module=../nginx-ct-$NginxCTVersion \
  6. --add-module=../ngx_pagespeed-$PageSpeedVersion-beta \
  7. --with-http_v2_module \
  8. --with-http_ssl_module \
  9. --with-http_gzip_static_module \
  10. --with-ld-opt='-ljemalloc'
  11. make && make install

Ubuntu 16.04(不包括) 以下版本请在倒数第二行添加:

  1. --with-openssl=../$OpenSSLVersion \

设置变量

  

  1. [ -z "`grep ^'export PATH=' /etc/profile`" ] && echo "export PATH=/usr/local/openresty/nginx/sbin:\$PATH" >> /etc/profile
  2. [ -n "`grep ^'export PATH=' /etc/profile`" -a -z "`grep /usr/local/openresty/ /etc/profile`" ] && sed -i "s@^export PATH=\(.*\)@export PATH=/usr/local/openresty/nginx/sbin:\1@" /etc/profile
  3. . /etc/profile

后面就可以用,nginx -t 检测配置是否正确,nginx -s reload 重载 Nginx 了。

创建相关目录

  

  1. mkdir /data/wwwlogs/ -p
  2. mkdir /data/wwwroot/default/ -p
  3. cp /usr/local/openresty/nginx/html/index.html /data/wwwroot/default/

设置服务和开机启动

创建 /etc/systemd/system/openresty.service 文件,内容:

  1. # Stop dance for OpenResty
  2. # A modification of the Nginx systemd script
  3. # =======================
  4. #
  5. # ExecStop sends SIGSTOP (graceful stop) to the Nginx process.
  6. # If, after 5s (--retry QUIT/5) OpenResty is still running, systemd takes control
  7. # and sends SIGTERM (fast shutdown) to the main process.
  8. # After another 5s (TimeoutStopSec=5), and if OpenResty is alive, systemd sends
  9. # SIGKILL to all the remaining processes in the process group (KillMode=mixed).
  10. #
  11. # Nginx signals reference doc:
  12. # http://nginx.org/en/docs/control.html
  13. #
  14. [Unit]
  15. Description=A dynamic web platform based on Nginx and LuaJIT.
  16. After=network.target
  17. [Service]
  18. Type=forking
  19. PIDFile=/run/openresty.pid
  20. ExecStartPre=/usr/local/openresty/bin/openresty -t -q -g 'daemon on; master_process on;'
  21. ExecStart=/usr/local/openresty/bin/openresty -g 'daemon on; master_process on;'
  22. ExecReload=/usr/local/openresty/bin/openresty -g 'daemon on; master_process on;' -s reload
  23. ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/openresty.pid
  24. TimeoutStopSec=5
  25. KillMode=mixed
  26. [Install]
  27. WantedBy=multi-user.target

编辑 /usr/local/openresty/nginx/conf/nginx.conf 文件为:

  1. user www-data;
  2. worker_processes  auto;
  3. error_log /data/wwwlogs/error_nginx.log crit;
  4. pid /run/openresty.pid;
  5. worker_rlimit_nofile 51200;
  6. events {
  7.   use epoll;
  8.   worker_connections 51200;
  9.   multi_accept on;
  10. }
  11. http {
  12.   include mime.types;
  13.   default_type application/octet-stream;
  14.   server_names_hash_bucket_size 128;
  15.   client_header_buffer_size 32k;
  16.   large_client_header_buffers 4 32k;
  17.   client_max_body_size 1024m;
  18.   client_body_buffer_size 10m;
  19.   sendfile on;
  20.   tcp_nopush on;
  21.   keepalive_timeout 120;
  22.   server_tokens off;
  23.   tcp_nodelay on;
  24.   fastcgi_connect_timeout 300;
  25.   fastcgi_send_timeout 300;
  26.   fastcgi_read_timeout 300;
  27.   fastcgi_buffer_size 64k;
  28.   fastcgi_buffers 4 64k;
  29.   fastcgi_busy_buffers_size 128k;
  30.   fastcgi_temp_file_write_size 128k;
  31.   fastcgi_intercept_errors on;
  32.   #Gzip Compression
  33.   gzip on;
  34.   gzip_buffers 16 8k;
  35.   gzip_comp_level 6;
  36.   gzip_http_version 1.1;
  37.   gzip_min_length 256;
  38.   gzip_proxied any;
  39.   gzip_vary on;
  40.   gzip_types
  41.     text/xml application/xml application/atom+xml application/rss+xml application/xhtml+xml image/svg+xml
  42.     text/javascript application/javascript application/x-javascript
  43.     text/x-json application/json application/x-web-app-manifest+json
  44.     text/css text/plain text/x-component
  45.     font/opentype application/x-font-ttf application/vnd.ms-fontobject
  46.     image/x-icon;
  47.   gzip_disable "MSIE [1-6]\.(?!.*SV1)";
  48.   
  49. brotli             on;
  50. brotli_comp_level  6;
  51. brotli_types       text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/svg+xml;
  52.   #If you have a lot of static files to serve through Nginx then caching of the files' metadata (not the actual files' contents) can save some latency.
  53.   open_file_cache max=1000 inactive=20s;
  54.   open_file_cache_valid 30s;
  55.   open_file_cache_min_uses 2;
  56.   open_file_cache_errors on;
  57. ######################## default ############################
  58.   server {
  59.   listen 80;
  60.   server_name _;
  61.   access_log /data/wwwlogs/access_nginx.log combined;
  62.   root /data/wwwroot/default;
  63.   index index.html index.htm index.php;
  64.   location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
  65.     expires 30d;
  66.     access_log off;
  67.     }
  68.   location ~ .*\.(js|css)?$ {
  69.     expires 7d;
  70.     access_log off;
  71.     }
  72.   location ~ /\.ht {
  73.     deny all;
  74.     }
  75.   }
  76. ########################## vhost #############################
  77.   include vhost/*.conf;
  78. }

重新加载 systemd 服务,以便它可以找到我们的文件:

  1. systemctl daemon-reload

通过 systemd 启动 OpenResty:

  1. systemctl start openresty
设置开机启动:
  1. systemctl enable openresty
打开你的服务器 IP,就能看到安装好的 OpenResty 提示页了

[ 此帖被妙正灰在2017-06-20 16:28重新编辑 ]
本帖最近评分记录: 1 条评分 云币 +1
魔咒626 云币 +1 优秀文章-欢迎进行技术分享,感谢你的支持! 2017-06-21
级别: 论坛版主
发帖
1958
云币
4123
只看该作者 沙发  发表于: 2017-06-21
优秀文章-欢迎进行技术分享,感谢你的支持!
级别: 新人
发帖
11
云币
12
只看该作者 板凳  发表于: 2017-10-02
ReUbuntu 编译安装 OpenResty 及拓展支持
ERROR: failed to run command: sh ./configure --prefix=/usr/local/openresty/nginx \... $+*nb4  
级别: 论坛版主
发帖
9333
云币
14095
只看该作者 地板  发表于: 2017-10-02
回 2楼(sfdsl) 的帖子
前面不用加 sh
级别: 新人
发帖
11
云币
12
只看该作者 4楼 发表于: 2017-10-03
ReUbuntu 编译安装 OpenResty 及拓展支持
前辈,按照您的帖子,我还是没有搭建网站成功。 <OH{7>V  
我还是按照官方的建站教程,搭建起wordpress网站的。 q t(+X  
https://help.aliyun.com/document_detail/44619.html?spm=5176.doc43244.6.720.k85WIZ Z8Iqgz7|y  
可是,搭建起来的wordpress网站,很卡。。
级别: 论坛版主
发帖
9333
云币
14095
只看该作者 5楼 发表于: 2017-10-04
回 4楼(sfdsl) 的帖子
那里出错了呢?
级别: 新人
发帖
11
云币
12
只看该作者 6楼 发表于: 2017-10-06
ReUbuntu 编译安装 OpenResty 及拓展支持
我还是按照官方的建站教程,搭建起wordpress网站的。 l2(.>-#  
6%%PP8.F  
今天又挂了,数据库链接出错。坑了,我是菜鸟。 SBX|Bcyk*  
下面是调试信息, } %+qP +O\  
;,dkJ7M  
Warning: mysqli_real_connect(): (HY000/2002): No such file or directory in /alidata/www/phpwind/wordpress/wp-includes/wp-db.php on line 1548 v{.\iIg N  
& N;pH  
Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /alidata/www/phpwind/wordpress/wp-includes/wp-db.php on line 1578 p'80d:  
<PioQ>~  
Warning: mysql_connect(): No such file or directory in /alidata/www/phpwind/wordpress/wp-includes/wp-db.php on line 1578 dnwdFsf  
*="m3:c'J  
然后又看了下mysql安装目录下的文件 @89I#t6A.  
O ^0"  
_W|R;Cz]  
VJg,~lQN#t  
x<s|vgl|  
级别: 新人
发帖
11
云币
12
只看该作者 7楼 发表于: 2017-10-06
回 5楼妙正灰的帖子
很是难过,遇到的问题,不知道该怎么解决。 -\Z `z}D  
感觉束手无策
级别: 论坛版主
发帖
9333
云币
14095
只看该作者 8楼 发表于: 2017-10-08
回 6楼(sfdsl) 的帖子
这个是 phpwind 的数据库文件
发表主题 回复主题
« 返回列表上一主题下一主题

限100 字节
批量上传需要先选择文件,再选择上传
 
验证问题: ECS是阿里云提供的什么服务? 正确答案:云服务器
上一个 下一个