将 Phusion Passenger 安装为动态 Nginx 模块;模块似乎没有加载但没有错误
Installing Phusion Passenger as a dynamic Nginx module; module doesn't seem to load but no errors
我正在尝试将 Phusion Passenger 安装为动态模块,并从存储库安装了 Nginx。该过程似乎在运行,但我的 Meteor 应用程序无法加载,而且 Passenger 模块似乎没有 运行ning。
OS:红帽 8
Nginx: 1.20.1
乘客:单机版 6.0.12
流星:2.5.1
我是如何构建模块的:
按照 tutorial
独立安装 Passenger
-
sudo dnf install passenger-devel.x86_64
- 检查安装
sudo /usr/bin/passenger-config validate-install
这表明“一切看起来都不错”
- 检查乘客模块路径
passenger-config --nginx-addon-dir
returns
/usr/share/passenger/ngx_http_passenger_module
和
sudo ls /usr/share/passenger/ngx_http_passenger_module
显示
config ContentHandler.c ngx_http_passenger_module.c StaticContentHandler.h
ConfigGeneral ContentHandler.h ngx_http_passenger_module.h
Configuration.c LocationConfig README.md
Configuration.h MainConfig StaticContentHandler.c
- 安装 PCRE
sudo yum install pcre-devel
- 从 repo 安装 Nginx
sudo yum module list nginx
sudo yum module reset nginx
sudo yum module enable nginx:1.20
sudo yum install nginx
sudo systemctl enable nginx
- 下载 Nginx 源代码
wget https://nginx.org/download/nginx-1.20.1.tar.gz
tar zxf nginx-1.20.1.tar.gz
cd nginx-1.20.1/
- 检查编译标志:
nginx -V
- 使用
nginx -V
的输出来构建然后 运行 configure
命令(尽管正如输出显示的 --wtih-compat 我可能已经使用 ./configure --with-compat --add-dynamic-module=$(passenger-config --nginx-addon-dir)
代替)
./configure --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/./configure --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-path=/run/nginx.pid --lock-path=/run/lock/subsys/nginx --user=nginx --group=nginx --with-compat --with-debug --with-file-aio --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_degradation_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_perl_module=dynamic --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail=dynamic --with-mail_ssl_module --with-pcre --with-pcre-jit --with-stream=dynamic --with-stream_ssl_module --with-stream_ssl_preread_module --with-threads --add-dynamic-module=$(passenger-config --nginx-addon-dir)
- 构建Passenger模块并将其复制到Nginx可以找到的地方
make modules
sudo cp objs/ngx_http_passenger_module.so /usr/share/nginx/modules/
- 告诉 Nginx 加载模块
sudo nano /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log info;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
load_module "/usr/share/nginx/modules/ngx_http_passenger_module.so";
include /usr/share/nginx/modules/*.conf;
我还注释掉了默认服务器块。
- 配置我的应用程序(已经在 /var/www/myapp 中解压,我从之前的测试中知道它可以与从存储库安装的 Nginx 和 Passenger 一起使用)
sudo nano /etc/nginx/conf.d/myapp.conf
从 conf 文件中提取:
server {
listen 80;
server_name myserveraddress;
# Tell Nginx and Passenger where your app's 'public' directory is
root /var/www/myapp/bundle/public;
# Turn on Passenger
passenger_enabled on;
passenger_startup_file main.js;
passenger_app_root /var/www/myapp/bundle;
...
- 重启nginx
sudo service nginx restart
我现在访问该网页但看到 404 未找到页面。在日志中我只看到这个:
"/var/www/myapp/bundle/public/index.html" is not found (2: No such file or directory)
没有其他错误、警告或信息。
这表明 Nginx 正在加载我的配置文件,否则它不会在 /var/www/myapp/bundle 中查找。但它似乎没有启用 Passenger,因为它仍在寻找 public/index.html 而不是 main.js.
我找不到任何方法来检查 Nginx 以查看哪些动态模块正在 运行ning,并且我尝试将日志级别设置为调试。我将不胜感激任何建议如何找出正在发生的事情/如何启用 Passenger 模块?
我解决了;问题是我没有意识到当您将 Passenger 作为动态模块安装时,您仍然需要进行与常规安装相同的配置。特别是,在您的 nginx.conf 中,您需要将此添加到 http 块:
passenger_root /usr/share/passenger-6.0.12;
passenger_ruby /usr/bin/ruby;
passenger_root应该是你的passenger安装的地方,你可以通过运行:
找到
passenger-config --root
而 passenger_ruby 是您的 ruby 文件。
我以前不明白,在所有配置中,Passenger 都必须安装,模块文件 ngx_http_passenger_module.so
只是告诉 nginx 如何与之对话的胶水。如果没有 passenger_root,nginx 将像未安装 passenger 模块一样工作。
我正在尝试将 Phusion Passenger 安装为动态模块,并从存储库安装了 Nginx。该过程似乎在运行,但我的 Meteor 应用程序无法加载,而且 Passenger 模块似乎没有 运行ning。
OS:红帽 8
Nginx: 1.20.1
乘客:单机版 6.0.12
流星:2.5.1
我是如何构建模块的:
按照 tutorial
独立安装 Passenger
sudo dnf install passenger-devel.x86_64
- 检查安装
sudo /usr/bin/passenger-config validate-install
这表明“一切看起来都不错”
- 检查乘客模块路径
passenger-config --nginx-addon-dir
returns
/usr/share/passenger/ngx_http_passenger_module
和
sudo ls /usr/share/passenger/ngx_http_passenger_module
显示
config ContentHandler.c ngx_http_passenger_module.c StaticContentHandler.h
ConfigGeneral ContentHandler.h ngx_http_passenger_module.h
Configuration.c LocationConfig README.md
Configuration.h MainConfig StaticContentHandler.c
- 安装 PCRE
sudo yum install pcre-devel
- 从 repo 安装 Nginx
sudo yum module list nginx
sudo yum module reset nginx
sudo yum module enable nginx:1.20
sudo yum install nginx
sudo systemctl enable nginx
- 下载 Nginx 源代码
wget https://nginx.org/download/nginx-1.20.1.tar.gz
tar zxf nginx-1.20.1.tar.gz
cd nginx-1.20.1/
- 检查编译标志:
nginx -V
- 使用
nginx -V
的输出来构建然后 运行configure
命令(尽管正如输出显示的 --wtih-compat 我可能已经使用./configure --with-compat --add-dynamic-module=$(passenger-config --nginx-addon-dir)
代替)
./configure --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/./configure --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-path=/run/nginx.pid --lock-path=/run/lock/subsys/nginx --user=nginx --group=nginx --with-compat --with-debug --with-file-aio --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_degradation_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_perl_module=dynamic --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail=dynamic --with-mail_ssl_module --with-pcre --with-pcre-jit --with-stream=dynamic --with-stream_ssl_module --with-stream_ssl_preread_module --with-threads --add-dynamic-module=$(passenger-config --nginx-addon-dir)
- 构建Passenger模块并将其复制到Nginx可以找到的地方
make modules
sudo cp objs/ngx_http_passenger_module.so /usr/share/nginx/modules/
- 告诉 Nginx 加载模块
sudo nano /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log info;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
load_module "/usr/share/nginx/modules/ngx_http_passenger_module.so";
include /usr/share/nginx/modules/*.conf;
我还注释掉了默认服务器块。
- 配置我的应用程序(已经在 /var/www/myapp 中解压,我从之前的测试中知道它可以与从存储库安装的 Nginx 和 Passenger 一起使用)
sudo nano /etc/nginx/conf.d/myapp.conf
从 conf 文件中提取:
server {
listen 80;
server_name myserveraddress;
# Tell Nginx and Passenger where your app's 'public' directory is
root /var/www/myapp/bundle/public;
# Turn on Passenger
passenger_enabled on;
passenger_startup_file main.js;
passenger_app_root /var/www/myapp/bundle;
...
- 重启nginx
sudo service nginx restart
我现在访问该网页但看到 404 未找到页面。在日志中我只看到这个:
"/var/www/myapp/bundle/public/index.html" is not found (2: No such file or directory)
没有其他错误、警告或信息。
这表明 Nginx 正在加载我的配置文件,否则它不会在 /var/www/myapp/bundle 中查找。但它似乎没有启用 Passenger,因为它仍在寻找 public/index.html 而不是 main.js.
我找不到任何方法来检查 Nginx 以查看哪些动态模块正在 运行ning,并且我尝试将日志级别设置为调试。我将不胜感激任何建议如何找出正在发生的事情/如何启用 Passenger 模块?
我解决了;问题是我没有意识到当您将 Passenger 作为动态模块安装时,您仍然需要进行与常规安装相同的配置。特别是,在您的 nginx.conf 中,您需要将此添加到 http 块:
passenger_root /usr/share/passenger-6.0.12;
passenger_ruby /usr/bin/ruby;
passenger_root应该是你的passenger安装的地方,你可以通过运行:
找到passenger-config --root
而 passenger_ruby 是您的 ruby 文件。
我以前不明白,在所有配置中,Passenger 都必须安装,模块文件 ngx_http_passenger_module.so
只是告诉 nginx 如何与之对话的胶水。如果没有 passenger_root,nginx 将像未安装 passenger 模块一样工作。