User Tools

Site Tools


doc:howto:http.nginx

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
doc:howto:http.nginx [2012/09/21 15:51]
written_direcon
doc:howto:http.nginx [2014/11/29 11:51] (current)
tmomas nginx-syslog added
Line 1: Line 1:
-Trial and error.+====== Nginx ======
  
-This is what I did to make PHP5 to work.+[[http://​wiki.nginx.org/​|Nginx]] ​is a high-performance http-server with other functions as well. 
 +It is a perfect candidate ​to run on OpenWRT due to the performance and memory handling.
  
-<​code>​opkg update +===== Installation ===== 
-opkg install php5-fastcgi</​code>​+<​code>​ 
 +opkg update 
 +opkg install php5-fastcgi ​nginx 
 +</​code>​ 
 + 
 +Of course there will be port issues if you installed LuCI before or after nginx, since LuCI package installs uhttpd, which also wants to claim port 80. 
 +So configuring and/or portforwarding may be neccessary. There are ways to run LuCI with another http daemon but that is not coverd here. 
 +For a quick fix, just change the uhttpd port to something else in ''/​etc/​config/​uhttpd''​. 
 + 
 +==== Configuration Files ==== 
 + 
 +=== nginx.conf === 
 + 
 +''/​etc/​nginx/​nginx.conf''​
  
-/​etc/​nginx/​nginx.conf 
 <​code>​ <​code>​
-location ~ \.php$ { +user nobody nogroup; 
- root           /srv/www/; +worker_processes ​ 1; 
- fastcgi_pass ​  127.0.0.1:1026+ 
- fastcgi_index ​ index.php;​ +error_log ​ logs/error.log; 
- fastcgi_param ​ SCRIPT_FILENAME ​ $document_root$fastcgi_script_name;​ +#​error_log ​ logs/error.log ​ notice; 
- include ​       fastcgi_params;+#​error_log ​ logs/error.log ​ info; 
 + 
 +events { 
 +    worker_connections ​ 1024; 
 +
 + 
 + 
 +http { 
 + include mime.types;​ 
 + index index.php index.html index.htm;​ 
 + default_type text/html
 + 
 + sendfile on; 
 + keepalive_timeout 65; 
 + gzip on; 
 + 
 + gzip_min_length ​ 1k; 
 + gzip_buffers ​    4 16k; 
 + gzip_http_version 1.0
 + gzip_comp_level 2; 
 + gzip_types ​      ​text/​plain application/​x-javascript text/css application/​xml;​ 
 + gzip_vary on; 
 + server { 
 +         listen ​      ​80;​ #​ Port, make sure it is not in conflict with another http daemon. 
 +         server_name ​ YOUR_SERVER;​ #​ Change this, reference -> http://​nginx.org/​en/​docs/​http/​server_names.html 
 + fastcgi_connect_timeout 300; 
 + fastcgi_send_timeout 300; 
 + fastcgi_read_timeout 300; 
 + fastcgi_buffer_size 32k; 
 + fastcgi_buffers 4 32k; 
 + fastcgi_busy_buffers_size 32k; 
 + fastcgi_temp_file_write_size 32k; 
 + client_body_timeout 10; 
 + client_header_timeout 10; 
 + send_timeout 60; # 60 sec should be enough, if experiencing a lot of timeouts, increase this. 
 + output_buffers ​32k
 + postpone_output 1460; 
 + 
 + root ​  /​mnt/​data/​www;​ #​ Your document root, where all public material is. 
 + 
 + location ~ \.php$ { 
 + fastcgi_index ​ index.php;​ 
 + include ​       fastcgi_params;​ 
 + fastcgi_param ​ SCRIPT_FILENAME ​ $document_root$fastcgi_script_name;​ 
 + 
 + if (-f $request_filename) { 
 + # Only throw it at PHP-FPM if the file exists (prevents some PHP exploits) 
 + fastcgi_pass ​   127.0.0.1:​1026    # The upstream determined above 
 +
 +
 + }
 } }
 </​code>​ </​code>​
  
-/​etc/​php.ini+=== php.ini === 
 +''​/​etc/​php.ini''​
 <​code>​ <​code>​
-cgi.force_redirect = 0+doc_root = "​YOUR/​DOCUMENT/​ROOT"​ 
 +cgi.force_redirect = 1
 cgi.redirect_status_env = "​yes";​ cgi.redirect_status_env = "​yes";​
 </​code>​ </​code>​
  
 +=== fastcgi_params ===
 +''/​etc/​nginx/​fastcgi_params''​
 +
 +If for what ever reason it was modified or wasn'​t,​ this one will work.
 +
 +<​code>​
 +fastcgi_param ​ QUERY_STRING ​      ​$query_string;​
 +fastcgi_param ​ REQUEST_METHOD ​    ​$request_method;​
 +fastcgi_param ​ CONTENT_TYPE ​      ​$content_type;​
 +fastcgi_param ​ CONTENT_LENGTH ​    ​$content_length;​
 +
 +fastcgi_param ​ SCRIPT_NAME ​       $fastcgi_script_name;​
 +fastcgi_param ​ REQUEST_URI ​       $request_uri;​
 +fastcgi_param ​ DOCUMENT_URI ​      ​$document_uri;​
 +fastcgi_param ​ DOCUMENT_ROOT ​     $document_root;​
 +fastcgi_param ​ SERVER_PROTOCOL ​   $server_protocol;​
 +fastcgi_param ​ HTTPS              $https if_not_empty;​
 +
 +fastcgi_param ​ GATEWAY_INTERFACE ​ CGI/1.1;
 +fastcgi_param ​ SERVER_SOFTWARE ​   nginx/​$nginx_version;​
 +
 +fastcgi_param ​ REMOTE_ADDR ​       $remote_addr;​
 +fastcgi_param ​ REMOTE_PORT ​       $remote_port;​
 +fastcgi_param ​ SERVER_ADDR ​       $server_addr;​
 +fastcgi_param ​ SERVER_PORT ​       $server_port;​
 +fastcgi_param ​ SERVER_NAME ​       $server_name;​
 +
 +# PHP only, required if PHP was built with --enable-force-cgi-redirect
 +fastcgi_param ​ REDIRECT_STATUS ​   200;
 +</​code>​
 +
 +===== Error Log =====
 +Error log is your friend.
 +Logs are located "/​var/​log/​nginx"​ by "​default"​.
 +
 +Read on nginx error log section for more information -> [[http://​wiki.nginx.org/​CoreModule#​error_log|nginx Core Module - Error Log]]
 +
 +For nginx logging to syslog, see package ''​nginx-syslog''​.
 +
 +===== Notes =====
 Make sure path's are correct for your case. Make sure path's are correct for your case.
 +
 +This setup works stable on [[toh/​tp-link/​tl-wr1043nd]],​ can tell tho that Attitude Adjustment 12.09-rc1 ar71xx package still works on this device - confirmed by CraXyOW3.
doc/howto/http.nginx.1348235462.txt.bz2 · Last modified: 2012/09/21 15:51 by written_direcon