Nginx關鍵配置
網上有PHP等提供FastCGI接口的范例,本文以Python作為范例講解一下簡單配置。
安裝Nginx時,configuration需要添加auth模塊,--with-http_auth_request_module
以下是Nginx配置
server {
listen 50000;
server_name localhost 192.168.254.132;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
auth_request /ncgi.py; # 處理路徑或者腳本
auth_request_set $url $sent_http_url;
proxy_pass $url;
}
location ~ \ncgi.py$ { # 為了處理上面的 /ncgi.py
fastcgi_pass 127.0.0.1:50001; #python或者其他語音提供的FastCGI服務
fastcgi_param REQUEST_URI $request_uri;
include fastcgi_params; # 使用默認的參數即可
}
}
python FastCGI服務
簡單的用flup提供服務,也可以用其他框架。 flup比較簡單,使用WSGIServer就可以直接運行開放接口。
environ 是nginx傳遞進來的http狀態的一些參數,包含下面代碼獲取的REQUEST_URI和其他關鍵信息,可以print出來看一下
start_response可以看出是nginx提供的一個回調函數,通過它可以傳遞狀態碼和頭給nginx模塊,下面代碼傳遞的url,nginx會用到
proxy_pass $url;中進行處理。 下面紅色代碼可以根據我們的業務需求,進行動態路由,或將加密的IP地址信息或者文件信息解碼等。
from flup.server.fcgi import WSGIServer
def parse_ip(environ, start_response):
request_uri = environ.get('REQUEST_URI') or ''
splits = request_uri.split('/')
if len(splits) < 3:
start_response('404 Error', [('url', '/404.jpg')])
else:
url = 'http://{}:8999/{}'.format(p.decrypt(splits[1]), '/'.join(splits[2:]))
start_response('200 OK', [('url', url)])
return ['']
if __name__ == '__main__':
WSGIServer(parse_ip, bindAddress=('127.0.0.1', 50001)).run()