在MacOS Sierra上的Apache上执行python脚本

时间:2017-07-01 15:12:27

标签: python apache .htaccess httpd.conf macos-sierra

我正在尝试创建一个python脚本(widget.py),它将从任意资源获取JSON提要。我无法让python脚本在localhost上执行。以下是我遵循的步骤:

  1. etc/apache2/httpd.conf我启用了LoadModule cgi_module libexec/apache2/mod_cgi.so
  2. 重新启动的Apache sudo apachectl restart
  3. 在我的目录中添加了一个.htaccess文件:

    <Directory "widget.py"> Options +ExecCGI AddHandler cgi-script .py </Directory>

    注意:我最终需要在我无法访问apache2目录的服务器上部署它。

  4. 导航至http://localhost/~walter/widget/widget.py

  5. 我收到500服务器错误。日志文件内容:

    [Sat Jul 01 08:51:00.922413 2017] [core:info] [pid 75403] AH00096: removed PID file /private/var/run/httpd.pid (pid=75403) [Sat Jul 01 08:51:00.922446 2017] [mpm_prefork:notice] [pid 75403] AH00169: caught SIGTERM, shutting down AH00112: Warning: DocumentRoot [/usr/docs/dummy-host.example.com] does not exist AH00112: Warning: DocumentRoot [/usr/docs/dummy-host2.example.com] does not exist [Sat Jul 01 08:51:01.449227 2017] [mpm_prefork:notice] [pid 75688] AH00163: Apache/2.4.25 (Unix) PHP/5.6.30 configured -- resuming normal operations [Sat Jul 01 08:51:01.449309 2017] [core:notice] [pid 75688] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'

    我是否需要在/etc/apache2/users/walter/http.conf中启用cgi?我应该吗?

3 个答案:

答案 0 :(得分:2)

让它发挥作用。以下是我遵循的步骤:

  1. etc/apache2/httpd.conf我取消注释:

    LoadModule cgi_module libexec/apache2/mod_cgi.so

  2. 重启Apache sudo apachectl restart

  3. 列表项将.htaccess文件添加到我的目录中,其中包含以下内容:

    Options ExecCGI AddHandler cgi-script .py Order allow,deny Allow from all

  4. 在我的python脚本

  5. 的顶部添加了#!/usr/bin/env python
  6. 在终端启用python脚本执行时使用:chmod +x widget.py

答案 1 :(得分:1)

Apache / WebSharing

他们没有GUI来打开或关闭OSX 10.10中的Web共享功能,而OSX 10.10以前是10.7中“系统偏好设置”中的GUI选项,但担心没有安装Apache,可以启动它。

这需要在位于 / Applications / Utilities / Terminal

的终端中完成

对于那些不熟悉终端的人来说,它确实没有您想像的那么吓人,一旦启动,您将面临命令提示符等您的命令-只需在命令中键入/粘贴并按Enter,某些命令没有响应-仅表示命令已完成,其他命令为您提供反馈-让我们开始吧……。

开始

sudo apachectl start

停止

sudo apachectl stop

重新启动

sudo apachectl restart

查找Apache版本

httpd -v

OSX Yosemite附带的Apache版本是Apache / 2.4.10

启动Apache之后–测试网络服务器是否在浏览器中正常运行– http://localhost –您应该看到“ It Works!”文本。

如果未通过localhost测试,则可以尝试运行Apache进行故障排除,以查看其配置文件中是否有任何错误

apachectl configtest –重要的是要检查是否正确配置

这将为您指出可能出了什么问题。

文档根目录

文档根目录是从文件系统共享文件的位置,与传统名称“ public_html ”和“ htdocs ”相似,OSX在历史上有2个Web根,一个在系统级别,一个在用户级别–您可以同时设置或仅与一个用户一起运行,一个用户级别允许多个帐户拥有自己的Web根,而系统一个对所有用户都是全局的。 Apple似乎在继续进行一级用户方面的工作较少,但仍可以通过对配置文件进行一些额外的调整来进行设置。使用一级用户更容易,因为您不必继续以管理员身份进行身份验证。 系统级网络根 –默认系统文档根目录仍位于– http://localhost/ 这些文件在归档系统中的–

处共享
/Library/WebServer/Documents/

用户级别根

默认情况下缺少的另一个Web根目录是用户帐户中的“ 〜/站点”文件夹。设置需要花费一些时间,但是有些用户已经习惯了使用它。

您需要在帐户的根目录下创建一个“ 站点”文件夹,然后该文件夹才能工作。制作好Sites文件夹后,您会注意到它具有一个唯一的图标,该图标是一些较旧版本的回溯。在设置接下来描述的用户配置文件之前,先创建该文件夹。

您还需要进行一些其他调整,以恢复〜/ Sites 文件夹并运行。

在Sites文件夹中创建cgi-bin文件夹,并将cgi-bin权限设置为可全局写入。如果不是a + rwx,则说明该文件夹不可写

chmod a+rwx cgi-bin

添加在以下位置归档的“ username.conf”

/etc/apache2/users/

如果您还没有一个(很有可能),则创建一个以后缀为。 conf 的帐户的短用户名命名的帐户,最好通过以下方法解决它的位置和权限/所有权:使用端子,文本编辑器“ nano ”将是处理此问题的最佳工具。

启动终端,(应用程序/实用程序),并按照以下命令操作,第一个将您带到正确的位置,第二个将在命令行上打开文本编辑器(交换'用户名”,如果您不知道帐户的简称,请在终端提示下输入“ whoami”):

cd /etc/apache2/users
sudo nano accountname.conf

然后在下面的代码中的“帐户名”中添加下面交换的内容:

<Directory "/Users/accountname/Sites/">
   AllowOverride All
   Options Indexes MultiViews FollowSymLinks
   Require all granted
</Directory>

<Directory "/Users/accountname/Sites/cgi-bin/">
    AllowOverride None
    Options ExecCGI
    AddHandler cgi-script .cgi .pl .tcl .py
    Order allow,deny
    Allow from all
</Directory>

取消注释服务器名称并提供域名

ServerName localhost:8080

对该文件的权限应为:

-rw-r--r--   1 root  wheel  298 Jun 28 16:47 accountname.conf

如果不需要,您需要更改...

sudo chmod 644 accountname.conf

打开主要的httpd.conf并允许一些模块:

sudo nano /etc/apache2/httpd.conf

并确保未注释这4个模块(前2个应在全新安装中):

LoadModule authz_core_module libexec/apache2/mod_authz_core.so
LoadModule authz_host_module libexec/apache2/mod_authz_host.so
LoadModule userdir_module libexec/apache2/mod_userdir.so
LoadModule cgi_module libexec/apache2/mod_cgi.so
LoadModule php7_module libexec/apache2/libphp7.so

在权限下方搜索更新目录。

<Directory />
#Options FollowSymLinks
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Require all granted
</Directory>

搜索ScriptAliasMatch并将其替换为ScriptAlias,并替换为我们的自定义Sites / cgi-bin文件夹路径

ScriptAlias "/cgi-bin/" "/Users/accountname/Sites/cgi-bin/"

搜索并替换为我们的自定义文件夹权限

<Directory "/Users/accountname/Sites/cgi-bin">
    AllowOverride All
    Options +ExecCGI
    Require all granted
    AddHandler cgi-script .cgi .py
</Directory>

搜索“ AddHandler ”并在下面添加处理程序

AddHandler cgi-script .cgi
AddHandler cgi-script .py

如果以上行产生问题,则将其注释掉 还要在 httpd.conf

中取消注释该配置文件
Include /private/etc/apache2/extra/httpd-userdir.conf

然后打开另一个Apache配置文件并取消注释另一个文件:

sudo nano /etc/apache2/extra/httpd-userdir.conf

取消注释:

Include /private/etc/apache2/users/*.conf

重新启动Apache以读取新文件:

sudo apachectl restart

然后可以在以下位置查看此用户级别文档的根目录:

http://localhost/~accountname/

如果文件夹为空,则应该只看到类似于目录树的结构。

覆盖.htaccess并允许URL重写

如果要在/ Library / WebServer / Documents中使用文档根目录,则最好允许使用任何。 htaccess 文件覆盖默认设置-这可以通过编辑来实现第217行的 httpd.conf 文件,并将 AllowOverride 设置为 All ,然后重新启动Apache。通过执行上一步,已经在站点级别的webroot上解决了此问题。

sudo nano /etc/apache2/httpd.conf

此外,尽管这里允许URL重写,所以您的永久链接看起来干净而丑陋。 在httpd.conf

行下方取消注释
LoadModule rewrite_module libexec/apache2/mod_rewrite.so

Python

一旦我们在provola.py中创建了python文件html代码,使其可执行并放置在〜/ Sites / cgi-bin /文件夹内

sudo chmod +x provola.py

重新启动apache

sudo apachectl restart

引用链接-http://coolestguidesontheplanet.com/get-apache-mysql-php-phpmyadmin-working-osx-10-10-yosemite/

答案 2 :(得分:0)

1,2。好的。

  1. /etc/apache2/httpd.conf中是否允许使用.htaccess文件?
  2. <Directory "widget.py"> - 我想你想要<File "widget.py">

    1. 查看错误日志 - 错误是什么?