LoginSignup
3
8

More than 3 years have passed since last update.

nginxでPythonをCGIとして実行する

Last updated at Posted at 2019-07-15
インストール
apt install python3 nginx-full fcgiwrap
nginxの設定
vi /etc/nginx/conf.d/fcgiwrap.conf
中身
server {
    listen 80;
    listen [::]:80;

    server_name cgitest;
    set $base /home/あなたのhome/DocumentRoot;
    root $base/cgitest;

location ~ \.py$ {
    gzip off;
    include fastcgi_params;
    fastcgi_pass unix:/var/run/fcgiwrap.socket;
    fastcgi_index index.py;
fastcgi_param DOCUMENT_ROOT     $realpath_root;
    fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
    }
}
再読込
service nginx restart
service fcgiwrap restart
スクリプトに実行権限を与えておこう
mkdir ~/htdocs
vi test.py 
chmod +x test.py 
test.py
#!/usr/bin/python3
print("HTTP/1.0 200 OK")
print("Content-type: text/html\n\n")
print("")
print("Hello world")
domainを通す
vi /etc/hosts
127.0.0.1 cgitest

ブラウザで
http://cgitest/test.py
を開けば問題ないでしょう

image.png

query(パラメタ)とPOST

url?foo=bar とかPOSTは以下の通り。

test.py
#!/usr/bin/python3
import urllib.parse

print("HTTP/1.0 200 OK")
print("Content-type: text/html\n\n")
print("")
print("url?var=foo <br>")
getquery = os.environ.get('QUERY_STRING')
print(getquery)
query = urllib.parse.parse_qs(getquery)
print(query)
print("post <br>")
posted = input()
print(posted)
print(urllib.parse.parse_qs(posted))
curlテスト
# curl -X POST -d "eee=uuu" -d "aaa=bbbb"  "http://cgitest/test/removeimage.py?py=aa&chin=5"


url?var=foo <br>
py=aa&chin=5
{'py': ['aa'], 'chin': ['5']}
post <br>
eee=uuu&aaa=bbbb
{'eee': ['uuu'], 'aaa': ['bbbb']}

Ref

http://ekzemplaro.org/data_base/doc/web_server/nginx/
https://stackoverflow.com/questions/16253036/python-on-nginx-using-fcgiwrap-upstream-closed-prematurely-fastcgi-stdout-whil
https://qiita.com/gam0022/items/d16cc83a32c5c2efdefc
https://note.nkmk.me/python-urllib-parse-query-string/
https://www.setouchino.cloud/blogs/33#part-5b2df4e0f04afe49

3
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
8