OracleLinux9 安装 fcgiwrap 并添加 selinux 规则以在 nginx 调用

fcgiwrap在其他系统上一般直接输命令就能安装,但是OracleLinux9会提示找不到软件包。安装成功后,selinux也会阻碍nginx的调用。

原因

OracleLinux9的这个软件包位于默认不启用的developer仓库。

安装fcgiwrap

  1. 编辑配置,将repo启用
sudo vi /etc/yum.repos.d/oracle-epel-ol9.repo
sudo dnf update
  1. 成功安装
sudo dnf install fcgiwrap

手动配置fcgiwrap服务

安装的fcgiwrap并没有systemd服务,因此需要手动配置

  1. 新建/var/run/nginx目录
cd /var/run
sudo mkdir nginx
sudo chown nginx:nginx nginx
  1. 创建fcgiwrap服务(需要先安装nginx)
sudo dnf install nginx
sudo nano /etc/systemd/system/fcgiwrap.service

写入如下内容

[Unit]
Description=Simple CGI Server
After=network.target

[Service]
ExecStart=/usr/sbin/fcgiwrap -s unix:/run/nginx/fcgiwrap.socket
User=nginx
Group=nginx

[Install]
WantedBy=multi-user.target
  1. 刷新并启动服务,查看运行状态
sudo systemctl daemon-reload
sudo systemctl start fcgiwrap
sudo systemctl status fcgiwrap
  1. 启动正常后,设置开机启动
sudo systemctl enable fcgiwrap

配置nginx CGI

  1. 进入某网站的配置
sudo vi /etc/nginx/conf.d/yourweb.conf
  1. 写入cgi配置
location /cgi-bin/yourcgi {
	include fastcgi_params;
	fastcgi_pass unix:/var/run/nginx/fcgiwrap.socket;
	fastcgi_param SCRIPT_FILENAME /path/to/your/cgi/file;
	# 继续传递其他参数...
}

解决selinux问题

在这一步后,nginx对cgi的访问仍然会被selinux拦截,因此还需要放行访问。请按如下步骤操作

  1. 创建审计规则文件夹
sudo mkdir /etc/selinux/audit2allow
cd /etc/selinux/audit2allow
  1. 访问目标cgi路径,被拒绝访问
  2. 查看审计拦截情况
sudo cat /var/log/audit/audit.log | grep nginx | grep denied

输出示例如下

type=AVC msg=audit(1699720883.997:1431781): avc:  denied  { connectto } for  pid=2205472 comm="nginx" path="/var/run/nginx/fcgiwrap.socket" scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:system_r:unconfined_service_t:s0 tclass=unix_stream_socket permissive=0
  1. 基于此创建放行规则
sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M allow_nginx_proxy_fcgiwrap

正常情况下输出:

******************** IMPORTANT ***********************
To make this policy package active, execute:

semodule -i allow_nginx_proxy_fcgiwrap.pp
  1. 加载放行规则
sudo semodule -i allow_nginx_proxy_fcgiwrap.pp
  1. 检查是否能正常访问cgi,如不行,重复执行2~6直至成功访问。
  2. 大功告成!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好!要在Linux上配置Nginx来支持CGI,你需要进行以下步骤: 1. 安装Nginx:使用包管理器(如apt、yum或dnf)来安装Nginx。例如,在Ubuntu上可以运行以下命令:`sudo apt-get install nginx` 2. 配置Nginx:打开Nginx的配置文件,通常位于`/etc/nginx/nginx.conf`或`/etc/nginx/conf.d/default.conf`。在`http`块内添加以下配置: ``` server { ... location /cgi-bin/ { root /path/to/cgi/files; # 替换为你的CGI文件所在的目录 fastcgi_pass unix:/var/run/fcgiwrap.socket; # 替换为你的FastCGI服务地址 include /etc/nginx/fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } ... } ``` 这个配置将告诉Nginx将以`/cgi-bin/`开头的URL请求转发给FastCGI服务,并将CGI文件所在的目录设置为`/path/to/cgi/files`。 3. 安装和配置FastCGI:使用包管理器安装FastCGI服务。例如,在Ubuntu上可以运行以下命令:`sudo apt-get install fcgiwrap` 4. 启动FastCGI服务:运行以下命令启动FastCGI服务: ``` sudo systemctl start fcgiwrap sudo systemctl enable fcgiwrap ``` 这将启动FastCGI服务并设置为开机自启动。 5. 重新加载Nginx配置:运行以下命令重新加载Nginx的配置文件: ``` sudo systemctl reload nginx ``` 现在,你的Nginx已经配置好支持CGI了。你可以将你的CGI文件放在指定的目录`/path/to/cgi/files`下,并通过访问`http://yourdomain.com/cgi-bin/your-cgi-script`来执行CGI脚本。 请注意,以上步骤是一种常见的配置方式,具体配置可能会因系统环境而有所不同。建议参考Nginx和FastCGI的官方文档以获取更详细的配置信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值