1、安装Nginx
官网下载 http://nginx.org/en/download.html
2、安装IIS
3、安装python
官网下载 https://www.python.org/
4、配置flup
ps:1、此处Python和flup需要搭配使用,因为flup有对应py的版本限制
2、Nginx绑定80端口失败,请在Windows的服务中禁用 SQL Server Reporting Services (SQLEXPRESS) 这个服务,因为它就占用了80端口
1、修改nginx-1.10.0\conf中的nginx.conf,在其中增加下面代码
server {
listen 80;
server_name test.com;
#此处的location配置访问服务器上的py
location ^ ~ /python/ {
#fastcgi_pass unix: /tmp/python - cgi.sock;
fastcgi_pass 127.0.0.1 : 8008;#此处的ip及端口会在接下来的py文件中监听使用
#下面三句不用改动
fastcgi_param SCRIPT_FILENAME "";
fastcgi_param PATH_INFO $fastcgi_script_name;
include fastcgi.conf
}
}
2、编写py文件test.py
#!/usr/bin/python
# encoding : utf-8
from cgi import parse_qs
from cgi import escape
from flup.server.fcgi import WSGIServer
def myapp(environ, start_response):
#下面代码是从请求URL中提取URL参数
parameters = parse_qs(environ.get('QUERY_STRING', ''))
if 's' in parameters:
s = escape(parameters['s'][0])
if 'url' in parameters:
url = escape(parameters['url'][0])
#r = test(s, url)
start_response('200 OK', [('Content-Type', 'text/plain')])
return "s="+s+"---"+"url="+url;
if __name__ == '__main__':
#此处监听的是Nginx中配置的ip和端口
WSGIServer(myapp,bindAddress=('127.0.0.1',8008)).run()
3、运行Nginx
用命令行窗口进入到Nginx文件夹,执行Start Nginx 或者 Nginx
4、运行Py文件test.py
用命令行窗口进入到test.py所在文件夹,执行下面代码
python ytsig.py --method=prefork/threaded minspare=50 maxspare=50maxchildren=1000
5、你就可以在浏览器中访问 http://127.0.0.1/python/?s=12&url=http://127.0.0.1
首先,在IIS中使用ASP.NET MVC4建了一个网站,把其端口设置为:8888(可任意设置一个可用端口)
接下来此处非常简单就可以实现Nginx反向代理IIS,我们接着刚刚Nginx配置Python的基础上执行添加一段代码即可,如下:
server {
listen 80;
server_name test.com;
#此处的location配置访问服务器上的py
location ^ ~ /python/ {
#fastcgi_pass unix: /tmp/python - cgi.sock;
fastcgi_pass 127.0.0.1 : 8008;#此处的ip及端口会在接下来的py文件中监听使用
#下面三句不用改动
fastcgi_param SCRIPT_FILENAME "";
fastcgi_param PATH_INFO $fastcgi_script_name;
include fastcgi.conf
}
#访问IIS,当请求链接不包含有/python/时,就转向到IIS中
location / {
proxy_pass http:127.0.0.1 : 8888 #IIS中网站配置的IP和端口
}
}
至此,我们就完成了Nginx反向代理使用IIS,使其可以同时在同一端口上访问ASP.NET MVC和Python
1、修改Nginx的nginx.conf文件,添加以下四行代码
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
server {
listen 80;
server_name test.com;
#此处的location配置访问服务器上的py
location ^ ~ /python/ {
#fastcgi_pass unix: /tmp/python - cgi.sock;
fastcgi_pass 127.0.0.1 : 8008;#此处的ip及端口会在接下来的py文件中监听使用
#下面三句不用改动
fastcgi_param SCRIPT_FILENAME "";
fastcgi_param PATH_INFO $fastcgi_script_name;
include fastcgi.conf
}
#访问IIS,当请求链接不包含有/python/时,就转向到IIS中
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http:127.0.0.1 : 8888 #IIS中网站配置的IP和端口
}
}
#region 获取反向代理时的客户端的IP地址 getClientIP
///
/// 获取反向代理时的客户端的IP地址
///
/// 返回客户端真实IP
private string getClientIP()
{
HttpRequestBase request = HttpContext.Request;
string ip = request.Headers.Get("x-forwarded-for");
if (ip == null || ip.Length == 0 || string.Equals("unknown", ip, StringComparison.OrdinalIgnoreCase))
{
ip = request.Headers.Get("Proxy-Client-IP");
}
if (ip == null || ip.Length == 0 || string.Equals("unknown", ip, StringComparison.OrdinalIgnoreCase))
{
ip = request.Headers.Get("WL-Proxy-Client-IP");
}
if (ip == null || ip.Length == 0 || string.Equals("unknown", ip, StringComparison.OrdinalIgnoreCase))
{
ip = request.UserHostAddress;
}
return ip;
}
#endregion
Over…
参考资料:
1、http://blog.163.com/sky20081816@126/blog/static/1647610232010824262695/
2、http://blog.csdn.net/cclovett/article/details/26259175
3、http://zhidao.baidu.com/link?url=CdWrjHJ3VLiawbVfjSdB7G8fwzTcypd4qvOyT3xzx3BZG4_G2P_DbTHVSpiMupQQaeFwpajZjckwVkDpg6ZfgpzabZpzofwGjeTks2CCd_e