Articles of cgi

Nginx地图客户端证书REMOTE_USER为uWSGI回退到基本身份validation?

我使用nginx和uWSGI来为Mercurial服务; 它通过SSL进行基本身份validation(Nginx是SSL终结者;它不会传递给Hg),但是由于基本身份validation(即使通过SSL)的安全性有限,正如包括本站在内的各个地方所讨论的,我想允许用户也可以连接客户端证书,例如TortoiseHg支持的东西。 ssl_verify_client optional; … map $ssl_client_s_dn $ssl_client_s_dn_cn { default ""; ~/CN=(?<CN>[^/]+) $CN; }; … location / { uwsgi_pass unix:/run/uwsgi/app/hgweb/socket; include uwsgi_params; uwsgi_param SERVER_ADDR $server_addr; uwsgi_param REMOTE_USER $ssl_client_s_dn_cn; #uwsgi_param REMOTE_USER $remote_user; #auth_basic "Mercurial repositories"; #auth_basic_user_file /srv/hg/.htpasswd; } 所以我把CN当作用户名。 但是,如果没有客户端证书(最好不是在有证书但validation失败时 – 只是在这种情况下出现错误),如何使其回退到基本身份validation? 我发现一个例子是通过一个单独的服务器监听另一个端口,我想避免它: https : //github.com/winne27/nginx-cert-and-basic-auth/blob/master/nginx-example .conf文件 此外,在一些例子中,我已经看到了以下location检查: 他们有必要吗? if ($ssl_client_verify != SUCCESS) { return 496; […]

使用nginx和FastCGI的Perl Web服务 – 无法读取参数

关于如何使用FastCGI到CGI包装来使用nginx来提供Perl代码,有很多教程。 但是我很喜欢使用Perl模块,所以我不需要包装器。 我试图找出正确的方法来设置。 这是我迄今为止的代码: #!perl use CGI; use FCGI; my $s = FCGI::OpenSocket(':9000',20); my $r = FCGI::Request( \*STDIN, \*STDOUT, \*STDERR, \%ENV, $s); while ($r->Accept >= 0) { my $cgi = CGI->new; print "Content-type: text/html\n\n"; print "<html><body>The foo input is ", $cgi->param('foo'), "</body></html>"; $r->Finish; } 并像这样在nginx中启用它: location /foo { include /etc/nginx/fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.pl; } […]

Nginx + fastcgimultithreading

你好,我一直在试图做fastcgi应用程序,我希望它是multithreading的,所以它可以处理大量的请求在同一时间。 我find了代码,并修改了一下 FCGX_InitRequest(&request, 0, FCGI_FAIL_ACCEPT_ON_INTR); for (;;) { static pthread_mutex_t accept_mutex = PTHREAD_MUTEX_INITIALIZER; static pthread_mutex_t counts_mutex = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_lock(&accept_mutex); rc = FCGX_Accept_r(&request); pthread_mutex_unlock(&accept_mutex); … … … FCGX_FPrintF(request.out,"%s",test_stream.str().c_str()); FCGX_Finish_r(&request); } 代码一直在接受,所以实际上等待,直到请求完成。 我试过像这样产卵fastcgi spawn-fcgi -p 8001 -U www-data -n handler.cgi -F 32 spawn-fcgi -p 8001 -U www-data -n handler.cgi — /usr/bin/multiwatch -F 32

为什么不能Nginx POST到我的Perl后端?

编辑:所以我只是发现,GET方法确实工作,但POST方法却不工作! 这可能是重要的。 所以我在Debian Etch上运行Nginx。 Nginx通常不会提供cgi / pl文件,所以我遵循指导来让我的后端工作。 http://technotes.1000lines.net/?p=23 我的后端在Apache上工作正常,但是我必须安装一个使用nginx(lib-www)的模块。 它现在可以工作,但由于某种原因,POST / GET方法不起作用….举个例子,我的后端被设置为接受产品SKU的URL,并且只是当你做它时将它添加到购物车。 现在,如果我直接input这个URL这个附加值,它工作正常,将其添加到购物车,一切都美丽的作品…. 但是,当我将产品添加到购物车时,我的所有产品页面都设置为提交给我的后端。 它提交了完全相同的值,我可以键入到我的浏览器窗口,除了它不工作(相比之下,只是把它input到我的url栏,它工作)。 现在我正在考虑我正在使用的Perl包装代码是有点不对或什么的? 是这里: http://technotes.1000lines.net/fastcgi-wrapper.pl 我只做了一些改变…我只是做了一个文件夹,它想要安装套接字(但也许它应该是在不同的文件夹中一起),在我的nginx conf我基本上是这样的: location ~ ^/cgi-bin/.*\.pl$ { gzip off; fastcgi_pass unix:/var/run/nginx/perl_cgi-dispatch.sock; fastcgi_param SCRIPT_FILENAME /www/blah.com$fastcgi_script_name; include fastcgi_params; } 我的参数和文章中的一样,我只有默认的MIMEtypes设置。 任何想法,为什么这是行不通的? 我会愿意提供任何您需要的额外信息。

使用fcgiwrap的nginx上的Python – 上游从上游读取响应头时过早closuresFastCGI stdout

我想获得一个你好世界的Python脚本运行在我的nginx Web服务器上。 当我尝试加载URI时,出现“502 Bad Gateway”错误: http : //sub.dom.com/py-bin/hello.py 这是我的nginx错误日志中的错误。 2013/04/27 13:54:14 [error] 14158#0: *1 upstream closed prematurely FastCGI stdout while reading response header from upstream, client: wxyz, server: sub.dom.com, request: "GET /py-bin/hello.py HTTP/1.1", upstream: "fastcgi://unix:/var/run/fcgiwrap.socket:", host: "sub.dom.com" py-bin的位置:/home/cluber/www/sub.dom.com/py-bin public_html的位置:/home/cluber/www/sub.dom.com/public_html hello.py的位置:/home/cluber/www/sub.dom.com/py-bin/hello.py(chmod 777) fastcgi_params的位置:/ etc / nginx / fastcgi_params nginxconfiguration的内容 server { server_name sub.dom.com; access_log /home/cluber/www/sub.dom.com/logs/access.log; error_log […]

webserver和cgi进程如何相互通信?

我想了解Web服务器(例如:nginx)和cgi / fastcgi如何相互通信。 webserver如何将cgi脚本传递给cgi进程,以及cgi进程如何响应请求。 在Nginx中,我们像这样configuration让nginx将PHP脚本传递给php-fpm location / { root /home/service/public_html; fastcgi_pass unix:/tmp/php-fpm-test.socket; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /home/service/public_html/index.php; include fastcgi_params; } 它是如何工作的? 编辑:这将不胜感激,如果有人可以给我一个伪代码来描述一个进程(或其他)和php-fpm unix套接字之间的通信。

nginx uwsgi和cgi python脚本

我遇到了问题。 我有一个Python脚本。 你可以称之为CGI脚本。 它在Apache2下工作正常,但是在我closures系统之前只剩下一个它永远运行。 新系统使用nginx。 我已经configuration了uwsgi,正如许多人在search解决scheme时所build议的一样,为此脚本运行configuration的虚拟主机。 我已经在uwsgi维基上使用了第一个例子来确认我已经正确configuration了nginx,它可以和uwsgi进行通信。 像魅力一样工作。 现在我的并发症: 我的脚本是前段时间编写的,不是为WSGIdevise的,也不是我可以重写的。 所以我已经为uwsgi安装了cgi模块并尝试使用它。 我得到的是502错误。 没有任何正在执行的uwsgi。 这是我用于这个应用程序的configuration: [uwsgi] plugins = cgi socket = 127.0.0.1:9010 cgi = /=/usr/share/test/ cgi-allowed-ext = .py cgi-helper = .py=python 这里是我在index.py(testing脚本)中的代码: #!/usr/bin/python print "Content-type: text/html\n\n" print "<html><body><h1>It works!</h1></body></html>" 我尝试使用以下命令来testinguwsgi: /usr/sbin/uwsgi –http :9011 –ini /etc/uwsgi/test.ini –master 这里是我得到的输出: [uWSGI] getting INI configuration from /etc/uwsgi/test.ini *** Starting uWSGI […]

在nginx下运行lua(用Lua写一个网站)

作为一个学习练习,我已经花了一些时间来创build一些基本的应用程序来拾取Lua。 我已经在Natty / Ubuntu上安装并运行了,但是如何让它和nginx一起玩,我感觉有些遗憾。 我在这里读了一下http://wiki.nginx.org/HttpLuaModule#Installation并克隆这个回购https://github.com/chaoslawful/lua-nginx-module到我的/ etc / nginx文件夹中… 然而,即使在基本的层面上,我仍然很失落,不确定如何让它工作。 是否有可能只包括一些东西到我的nginx.conf文件来处理/ lua请求,还是我需要重新编译/重新安装nginx? (我宁愿避免这一点)。 我已经在nginx下通过fpm使用php了一段时间了,但我真的不知道从哪里开始让Lua以类似的方式工作。

pythonCGI脚本不会在Linux上打印希伯来语

可能重复: 如何使python 3 print()utf8 我不能让Python的CGI打印在Linux上的HTML网页的希伯来字符。 这是一个脚本,它演示了这个问题: #!/usr/bin/python3 print('Content-Type: text/html; charset=utf-8\n\n') print ('<html><body>') print ('first') print ('second') print ('תמות') print ('third') print ('</body></html>') 该文件保存在utf-8(不含BOM)中。 我直接从浏览器地址栏中调用这个.cgi脚本。 输出是: first second 而希伯来文和其他任何后面的都没有了。 没有错误显示在Apache日志或启用cgitb 我用apache 2.2和python 3.2在linux ubuntu 12.04和centos 6上用firefox,chrome和IEtesting。 当然,我可以在任何纯HTML页面上看到希伯来语。 在Windows上它工作得很好。 解: import sys print (sys.stdout.encoding) 给我: ANSI_X3.4-1968 最后这解决了我的问题: import sys, codecs sys.stdout = codecs.getwriter('utf-8')(sys.stdout.detach()) 这是另一个select: import sys, io […]

从CGI脚本调用Java程序失败

我有一个Python CGI脚本,我试图调用一个Java程序来执行任务。 Java程序使用JExcelAPI 。 当我从浏览器运行Python脚本时,它会失败,并显示错误消息,它无法从JExcelAPI中find类的类定义。 我想这是因为Python CGI脚本运行在apache用户下,并且apache用户没有设置适当的环境variables(即CLASSPATHvariables)。 我已经尝试使用-classpath /path/to/JExcelAPI开关调用程序,但这也不起作用。 你能帮我find让Apache用户意识到JExcelAPI的方法吗? 有没有办法为apache用户设置CLASSPATH环境variables? 谢谢