Trouble running python script as cgi under apache (ubuntu 12)

后端 未结 6 1773
再見小時候
再見小時候 2021-02-07 15:31

Disclosure: I searched a lot, and I don\'t think my question (for my configuration) is answered here. For example run python script as cgi apache server doesn\'t answer it.

相关标签:
6条回答
  • 2021-02-07 15:31

    In my case, I made a mistake with my ScriptAlias directive. I uncommented the original one, but forgot to configure a new one.

    As soon as I correctly changed and saved my sites-available/default config file from this:

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
    

    .. to this:

    ScriptAlias /cgi-bin/ /var/www/cgi-bin/
    <Directory "/var/www/cgi-bin">
    

    .. and reloaded apache2, it just worked: it stopped displaying my scripts as text, and started running them as a script. Also, it no longer displayed /var/www/cgi-bin as a directory in the browser, but now correctly displays the error:

    Forbidden 
    You don't have permission to access /cgi-bin/ on this server.
    
    0 讨论(0)
  • 2021-02-07 15:32

    What could also cause these symptoms, is that you don't have the apache2 cgi module loaded. This will also generate a log message in /var/log/apache2/access.log with an HTTP 304 error:

    192.168.2.3 - - [26/Jul/2014:11:56:34 +0200] "GET /cgi-bin/hello.py HTTP/1.1" 304 179 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36"
    

    Check loaded modules with:

    apache2ctl -M
    

    Look for:

    cgid_module (shared)
    

    If it's not loaded, load it with:

    a2enmod cgid
    

    Then restart apache2:

    service apache2 reload
    

    Then refresh your browser and purge your browser cache (CTRL + F5). And/or restart your browser, to be sure it's requesting the actual page, instead of using the browser cache.

    0 讨论(0)
  • 2021-02-07 15:41

    This worked for me,, as @flyking_ suggested, follow with some extra steps in the same order.

    I had to change in the directory - I am using raspberrypi (NOOB version linux) /etc/apache2/sites-available/default

    maintain the ones in these adding +ExecCGI and also Addhander cgi-script .cgi .py as below

    <Directory /var/www/>
           Options Indexes +ExecCGI FollowSymLinks MultiViews
           AddHandler cgi-script .cgi .py
           AllowOverride None
          Order allow,deny
          allow from all
    

    Then restart apache

    service apache2 restart
    

    This should restart the service, and verify whether the python script runs fine without errors in the terminal, before launching it in the browser.

    If no errors, then the sampe script would run fine.

    import cgi
    import cgitb; cgitb.enable()
    print "Content-type: text/html\n\n"
    print "<h1>Hello from Python!</h1>"
    

    Imp: later my script worked fine even without both the imports.

    Note: Clear the cache in the browser, or load it afresh with ctrl+F5. Hopefully this should solve.

    If this doesnt solve, then try this as @user2449877 suggested Check loaded modules with:

     apache2ctl -M
    

    Look for:

     cgid_module (shared)
    

    If it's not loaded, load it with:

      a2enmod cgid    
    

    Restart apache and then refresh browser

    0 讨论(0)
  • 2021-02-07 15:42

    try this

        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>
    

    cgi script

    import cgi
    import cgitb; cgitb.enable()
    print "Content-type: text/html\n\n"
    print "<h1>Hello from Python!</h1>"
    

    Why don't you configure like this? here.

    ScriptAlias /cgi-bin/ /var/www/my_cgi_dir/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>
    
    0 讨论(0)
  • 2021-02-07 15:42

    In my case (which is a shared unix machine), I also need to create a hidden file ".htaccess" with the following:

    Options +ExecCGI
    SetHandler cgi-script 
    

    It is also important to set the permissions accordingly (755 - group and other with no writing but execution permissions) as well as having:

    #!/usr/bin/python
    

    as a first line of the python CGI script.

    0 讨论(0)
  • 2021-02-07 15:48

    I was having the same problem and tried all of the above. Nothing helped. In the end it turned out to be a really stupid mistake. Since many people seem to have problems with this, I will post it anyway:

    I had not sym-linked my default site from "sites-available" to "sites-enabled" as described at the top of the apache.conf file:

    [...] Configuration files in the mods-enabled/ and sites-enabled/ directories contain particular configuration snippets which manage modules or virtual host configurations, respectively.

    They are activated by symlinking available configuration files from their respective *-available/ counterparts. These should be managed by using our helpers a2enmod/a2dismod, a2ensite/a2dissite. See their respective man pages for detailed information. [...]

    Thus, all my edits to the default file were not read by apache. Once I made the symlink, it worked.

    0 讨论(0)
提交回复
热议问题