CGI Apache mod_cgi.c oyama@cpan.org Shibuya Perl Mongers - - PowerPoint PPT Presentation

cgi
SMART_READER_LITE
LIVE PREVIEW

CGI Apache mod_cgi.c oyama@cpan.org Shibuya Perl Mongers - - PowerPoint PPT Presentation

CGI Apache mod_cgi.c oyama@cpan.org Shibuya Perl Mongers Shibuya.pm TechTalks#3 2003-06-13 p.1/17 Apache CGI Shibuya.pm TechTalks#3 2003-06-13 p.2/17 Apache http_core.c module mod_env.c


slide-1
SLIDE 1

CGI

Apache mod_cgi.c

  • yama@cpan.org

Shibuya Perl Mongers

Shibuya.pm TechTalks#3 2003-06-13 – p.1/17

slide-2
SLIDE 2
  • Apache
  • CGI
  • Shibuya.pm TechTalks#3 2003-06-13 – p.2/17
slide-3
SLIDE 3

Apache

  • module
  • module

Apache

Apache HTTP Server Apache CORE Apache module API http_core.c mod_env.c mod_log_config.c mod_negotiation.c mod_mime.c mod_include.c mod_autoindex.c mod_dir.c mod_cgi.c mod_asis.c mod_imap.c mod_actions.c mod_userdir.c mod_alias.c mod_access.c mod_auth.c mod_setenvif.c mod_php.c mod_perl.c

Shibuya.pm TechTalks#3 2003-06-13 – p.3/17

slide-4
SLIDE 4

CGI

  • URI

pipe

  • Body

pipe

  • pipe
  • mod_cgi.c

600

Shibuya.pm TechTalks#3 2003-06-13 – p.4/17

slide-5
SLIDE 5
  • 1
  • cgi-script

(AddHandler cgi-script .cgi)

  • subprocess_env

( )

  • pipe

fork

Shibuya.pm TechTalks#3 2003-06-13 – p.5/17

slide-6
SLIDE 6
  • 2
  • subprocess_env

CGI ( )

  • (

)

  • chdir
  • STDERR

error log (dup2)

  • (execle, execve)
  • Socket

Body pipe

Shibuya.pm TechTalks#3 2003-06-13 – p.6/17

slide-7
SLIDE 7
  • 1
  • CONTENT TYPE, CONTENT LENGTH
  • HTTP *
  • Apache

SERVER SIGNATURE, SERVER SOFTWARE, SERVER NAME, SERVER ROOT, REMOTE HOST, REMOTE ADDR, DOCUMENT ROOT, SERVER ADMIN, SCRIPT FILENAME, REMOTE PORT, REMOTE USER, AUTH TYPE, REMOTE IDENT, REDIRECT QUERY STRING, REDIRECT URL

Shibuya.pm TechTalks#3 2003-06-13 – p.7/17

slide-8
SLIDE 8
  • 2
  • CGI

GATEWAY INTERFACE = "CGI/1.1", SERVER PROTOCOL, REQUEST METHOD, QUERY STRING, REMOTE URI, SCRIPT NAME, PATH INFO, PATH TRANSLATED

Shibuya.pm TechTalks#3 2003-06-13 – p.8/17

slide-9
SLIDE 9

POST

  • Socket

8192 read pipe HUGE_STRING_LEN

  • read

flush

  • STDIN

Socket read pipe 300 DEFAULT_TIMEOUT Timeout

Shibuya.pm TechTalks#3 2003-06-13 – p.9/17

slide-10
SLIDE 10
  • 1
  • Location

REDIRECT

  • HTTP
  • STDOUT
  • STDOUT
  • STDERR
  • STDERR

Shibuya.pm TechTalks#3 2003-06-13 – p.10/17

slide-11
SLIDE 11

Response Header

  • Set-Cookie, Content-type, Status,

Location, Content-Length, Transfer-Encoding, Last-Modified, Set-Cookie

Shibuya.pm TechTalks#3 2003-06-13 – p.11/17

slide-12
SLIDE 12
  • &

8192 IOBUFSIZE

  • Socket

flush

  • Socket

300 Timeout DEFAULT_TIMEOUT Timeout

Shibuya.pm TechTalks#3 2003-06-13 – p.12/17

slide-13
SLIDE 13

Apache

  • LimitRequestLine

( 8190)

  • LimitRequestFieldsize

( 8190)

  • LimitRequestFields

( 100)

  • LimitRequestBody

( )

  • RLimitCPU

CPU

  • RLimitMEM

Shibuya.pm TechTalks#3 2003-06-13 – p.13/17

slide-14
SLIDE 14
  • 1
  • POST

STDIN ?

  • ?
  • ?
  • STOP

Shibuya.pm TechTalks#3 2003-06-13 – p.14/17

slide-15
SLIDE 15
  • 1
  • POST

STDIN ? Apache

  • ?

300

  • ?
  • STOP

pipe $SIG{PIPE}

Shibuya.pm TechTalks#3 2003-06-13 – p.14/17

slide-16
SLIDE 16
  • 2
  • "Location: /path/to/file"
  • CGI

Shibuya.pm TechTalks#3 2003-06-13 – p.15/17

slide-17
SLIDE 17
  • 2
  • "Location: /path/to/file"

Apache

  • CGI

RLimitMEM

Shibuya.pm TechTalks#3 2003-06-13 – p.15/17

slide-18
SLIDE 18
  • 3
  • CGI

SetEnv LD_PRELOAD /path/to/libdisable.so

$ cat disable_socket.c #include <stdio.h> int socket(int domain, int type, int protocol) { fprintf(stderr, "Ha Ha Ha! cannot use socke!\n"); return -1; } $ gcc -shared -o libdisable.so disable_socket.c

Shibuya.pm TechTalks#3 2003-06-13 – p.16/17

slide-19
SLIDE 19

2003 8 Apache ( Perl C ...)

Shibuya.pm TechTalks#3 2003-06-13 – p.17/17