From: Ian <ya...@po...> - 2014-04-07 18:57:58
|
To add PHP under Yaws 1.98, I simply installed php5-cgi and it worked without any config. Trouble is, PHP as CGI isn't very efficient - you get a fresh process for every request so you have the full overhead each time and things like opcache won't work. Is there is a better way to use PHP under Yaws? I was wondering if perhaps anyone has tried Davide's solution with any success - http://sourceforge.net/p/erlyaws/mailman/message/24175544/ - although that project doesn't seem to have been updated since 2009. |
From: Steve V. <vi...@ie...> - 2014-04-07 19:01:24
|
On Mon, Apr 7, 2014 at 2:57 PM, Ian <ya...@po...> wrote: > To add PHP under Yaws 1.98, I simply installed php5-cgi and it worked > without any config. > > Trouble is, PHP as CGI isn't very efficient - you get a fresh process > for every request so you have the full overhead each time and things > like opcache won't work. > > Is there is a better way to use PHP under Yaws? > > I was wondering if perhaps anyone has tried Davide's solution with any > success - http://sourceforge.net/p/erlyaws/mailman/message/24175544/ - > although that project doesn't seem to have been updated since 2009. > Davide's work aside, FCGI support is present in Yaws. Have you tried it with PHP? --steve |
From: Ian <ya...@po...> - 2014-04-07 19:22:26
|
Thanks for the quick reply, but it seems I'm confused. I've installed php5-fpm but it doesn't seem to have made any difference. In fact I haven't found a sure way to tell whether PHP is running as plain CGI or FastCGI. Sorry, I'm used to using it as a module under Aparche. |
From: Daniel F. <fly...@go...> - 2014-04-07 19:48:58
|
Hi, little summary: 1. start php-fpm 2. point yaws to the ip:port of the php-fpm process (you cant use sockets, so you need to change config of php-fpm to listen on port) 3. maybe whine because you cant use .htaccess files As most php apps today are based of single index.php files, you maybe want to use something like my error_mod, which redirects not found paths first to the php script: https://github.com/Flyingmana/cookbooks/blob/master/yaws/files/default/yaws_fcgi_404_to_index_php.erl actually I missused things a bit, as I did use the first solution I got working. Also you need to care about securing directories for older applications. The sure way to tell how php is running is via the phpinfo() coming from apache you first need to learn, that php-fpm runs as a complete independent process from the webserver and has its own worker management. Hope it helps, if you have more specific questions, just continue writing to the list. 2014-04-07 21:22 GMT+02:00 Ian <ya...@po...>: > Thanks for the quick reply, but it seems I'm confused. > > I've installed php5-fpm but it doesn't seem to have made any difference. > > In fact I haven't found a sure way to tell whether PHP is running as > plain CGI or FastCGI. > > Sorry, I'm used to using it as a module under Aparche. > > > > > ------------------------------------------------------------------------------ > Put Bad Developers to Shame > Dominate Development with Jenkins Continuous Integration > Continuously Automate Build, Test & Deployment > Start a new project now. Try Jenkins in the cloud. > http://p.sf.net/sfu/13600_Cloudbees > _______________________________________________ > Erlyaws-list mailing list > Erl...@li... > https://lists.sourceforge.net/lists/listinfo/erlyaws-list > |
From: Ian <ya...@po...> - 2014-04-07 20:40:58
|
Hello Daniel, I'm actually using your original error mod. I reconfigured it slightly for my specific purposes but that's beside the point. 1) I *think* php-fpm starts automatically, at least ps aux | grep php-fpm shows processes. 2) I see php-fpm.conf in /etc/php5/fpm along (along with another php.ini!?) and it seems that Yaws is unaware of it. If I understand you correctly (and I'm not sure that I do) I need to edit /etc/php5/fpm/pool.d/www.conf and to remove the socket and add the port: ;listen = /var/run/php5-fpm.sock listen = 127.0.0.1:9001 I see in your script you use call_fcgi_responder, but is there a way to get Yaws to send its requests to port 9001 by default? 3) I'm not a diehard Apache fan. I've made minimal use of htaccess in the past for maximum portability with security so there's not a huge amount of work to do. One problem is that phpinfo() doesn't distinguish plain from fast, it just says "Server API CGI/FastCGI" |
From: Ian <ya...@po...> - 2014-04-07 21:17:25
|
I should add that a quick test using the code in yaws_fcgi_404_to_index_php.erl shows it's not working. In the browser I see: CGI failure: {"connect to application server failed",econnrefused} Interestingly, the Yaws error report in the terminals says FastCGI: FastCGI failure: {"connect to application server failed",econnrefused} |
From: Steve V. <vi...@ie...> - 2014-04-07 23:13:40
|
Hi Ian, if you believe this is a bug and you can give me the steps for reproducing it, I can probably fix it reasonably quickly. --steve On Mon, Apr 7, 2014 at 5:17 PM, Ian <ya...@po...> wrote: > I should add that a quick test using the code in > yaws_fcgi_404_to_index_php.erl shows it's not working. In the browser I see: > > CGI failure: {"connect to application server failed",econnrefused} > > Interestingly, the Yaws error report in the terminals says FastCGI: > > FastCGI failure: {"connect to application server failed",econnrefused} > > > |
From: Ian <ya...@po...> - 2014-04-07 23:40:50
|
Hi Steve, I doubt that it's a bug. It's much more likely related to the fact that I don't really know how to use php[5]-fpm. Lots of people have this problem though and I'm sure I'll get to the bottom of it. Seems like Daniel has already figured out that side of the equation. What you can help with is tell me how & where Yaws' default php handler is set. Previously I needed to add php_handler = <cgi, /usr/lib/cgi-bin/php5> to each server config but this has proven to be unnecessary in v1.98 so this must now set by default somewhere and I probably need to change it - Yaws is currently talking directly to the plain cgi php interpreter unaware of the existence of the fpm. |
From: Steve V. <vi...@ie...> - 2014-04-08 00:00:44
|
Hi Ian, the default is in yaws.hrl: php_handler = {cgi, "/usr/bin/php-cgi"} For FCGI you want: php_handler = <fcgi, Host:Port> Also, page 55 of the Yaws PDF file at http://yaws.hyber.org/yaws.pdfmentions you can tell php5-cgi to use FCGI using the -b option, e.g.: php5-cgi -b '127.0.0.1:54321' --steve On Mon, Apr 7, 2014 at 7:40 PM, Ian <ya...@po...> wrote: > Hi Steve, I doubt that it's a bug. It's much more likely related to the > fact that I don't really know how to use php[5]-fpm. Lots of people have > this problem though and I'm sure I'll get to the bottom of it. Seems like > Daniel has already figured out that side of the equation. > > What you can help with is tell me how & where Yaws' default php handler is > set. > > Previously I needed to add > > php_handler = <cgi, /usr/lib/cgi-bin/php5> > > to each server config but this has proven to be unnecessary in v1.98 so > this must now set by default somewhere and I probably need to change it - > Yaws is currently talking directly to the plain cgi php interpreter unaware > of the existence of the fpm. > > > |
From: Ian <ya...@po...> - 2014-04-08 01:21:15
|
Thanks Steve, that is the complete answer and here it is step-by-step for anyone else: To enable FastCGI (which is needed for things like opcache to work) you need to... 1) Install php5-cgi with php5-fpm: sudo apt-get install php5-cgi php5-fpm 2) Override the default plain cgi in server conf for any virtual server you want FastCGI enabled by adding this to the server tags: php_handler = <fcgi, 127.0.0.1:####> where #### is your port of choice, e.g. 9001. 3) Bind php5-cgi to the same IP address and port: php5-cgi -b 127.0.0.1:9001 and then start Yaws. I put the commands in a script called YAWSstart.sh: #!/bin/bash echo 'starting yaws with id="default"' php5-cgi -b 127.0.0.1:9001 yaws -D and then in terminal: sudo chown root:root YAWSstart.sh sudo chmod 755 YAWSstart.sh so that Yaws can be started from terminal using: sudo sh YAWSstart.sh Similarly YAWSstop.sh is: #!/bin/bash yaws --stop killall php5-cgi Note: I couldn't get fcgi to work by default by editing yaws.hrl but I'm happy with this solution (plain cgi continues to work for servers that do not have the php_handler specified). |
From: Ian <ya...@po...> - 2014-04-08 01:51:18
|
Minor tweak: It is better/necessary to kill php5-cgi before attempting to stop Yaws i.e. #!/bin/bash killall php5-cgi yaws --stop |
From: Daniel F. <fly...@go...> - 2014-04-08 08:38:06
|
nice, thats something I did not know yet. Something I want to mention, many people use 9001 for fcgi, but also xdebug uses port 9001 as default. So be careful if you start with debugging to check they use different ports. 2014-04-08 2:00 GMT+02:00 Steve Vinoski <vi...@ie...>: > Hi Ian, the default is in yaws.hrl: > > php_handler = {cgi, "/usr/bin/php-cgi"} > > For FCGI you want: > > php_handler = <fcgi, Host:Port> > > Also, page 55 of the Yaws PDF file at http://yaws.hyber.org/yaws.pdfmentions you can tell php5-cgi to use FCGI using the -b option, e.g.: > > php5-cgi -b ’127.0.0.1:54321’ > > --steve > > > On Mon, Apr 7, 2014 at 7:40 PM, Ian <ya...@po...> wrote: > >> Hi Steve, I doubt that it's a bug. It's much more likely related to the >> fact that I don't really know how to use php[5]-fpm. Lots of people have >> this problem though and I'm sure I'll get to the bottom of it. Seems like >> Daniel has already figured out that side of the equation. >> >> What you can help with is tell me how & where Yaws' default php handler >> is set. >> >> Previously I needed to add >> >> php_handler = <cgi, /usr/lib/cgi-bin/php5> >> >> to each server config but this has proven to be unnecessary in v1.98 so >> this must now set by default somewhere and I probably need to change it - >> Yaws is currently talking directly to the plain cgi php interpreter unaware >> of the existence of the fpm. >> >> >> > |
From: Ian <ya...@po...> - 2014-04-08 13:07:29
|
Sorry to mess about with this but it's been a learning experience. 1) php5-fpm is not required. 2) Based on Daniel's comment, I bumped my port up to 9007. 3) My YAWSstart.sh has an omission - you need to add the "&" to the php5-cgi line to release the terminal: #!/bin/bash echo 'starting yaws with id="default"' php5-cgi -b 127.0.0.1:9007 & yaws -D 4) Re that tweak I mentioned for YAWSstart.sh, Yaws is taking up to a minute to stop after it's served some pages via fcgi on my system instead of stopping immediately like it did with plain cgi only. Putting "killall php5-cgi" first doesn't help speed this up but it does get it done. This way, if you think yaws is taking too long to stop you can abort it using ^C and not have to remember to kill the php5-cgi process. So, almost perfect now, except for Yaws taking so/too long to stop. |
From: Gustavo P. <de...@gm...> - 2014-04-08 14:03:25
|
> > #!/bin/bash > echo 'starting yaws with id="default"' > php5-cgi -b 127.0.0.1:9007 & > yaws -D I'm just learning yaws and erlang myself, but I think that If you want to restart yaws automatically when crashed, you have to add --heart in yaws -D. In this case, you should create a module and call php5-cgi using os:cmd (see erl -man os), and start yaws using runmod in the yaws.config. Gustavo On Tue, Apr 8, 2014 at 10:07 AM, Ian <ya...@po...> wrote: > Sorry to mess about with this but it's been a learning experience. > > 1) php5-fpm is not required. > > 2) Based on Daniel's comment, I bumped my port up to 9007. > > 3) My YAWSstart.sh has an omission - you need to add the "&" to the > php5-cgi line to release the terminal: > > #!/bin/bash > echo 'starting yaws with id="default"' > php5-cgi -b 127.0.0.1:9007 & > yaws -D > > 4) Re that tweak I mentioned for YAWSstart.sh, Yaws is taking up to a > minute to stop after it's served some pages via fcgi on my system > instead of stopping immediately like it did with plain cgi only. Putting > "killall php5-cgi" first doesn't help speed this up but it does get it > done. This way, if you think yaws is taking too long to stop you can > abort it using ^C and not have to remember to kill the php5-cgi process. > > So, almost perfect now, except for Yaws taking so/too long to stop. > > > > > ------------------------------------------------------------------------------ > Put Bad Developers to Shame > Dominate Development with Jenkins Continuous Integration > Continuously Automate Build, Test & Deployment > Start a new project now. Try Jenkins in the cloud. > http://p.sf.net/sfu/13600_Cloudbees > _______________________________________________ > Erlyaws-list mailing list > Erl...@li... > https://lists.sourceforge.net/lists/listinfo/erlyaws-list > |
From: Ian <ya...@po...> - 2014-04-09 15:50:24
|
Hi Gustavo, While I'm developing/testing I choose not to use the heart option - if Yaws crashes I want to know. However, it's probably worth pointing out that when php5-cgi stops* it does not crash the server. The following error message appears in the browser but it doesn't crash Yaws: CGI failure: {"connect to application server failed",econnrefused} Simply restarting php5-cgi process is all I have to do. This is because it is separate from Yaws (similar situation with database server) and I like it this way. * php5-cgi does keep stopping and I don't yet have the answer. It seems that I might need a process manager after all. |