Linux를 통해 HTTP 서버 lighttpd를 시작합니다.생성 대상

HTTP 서버, 특히 lighttpd가 해보고 싶은 게 많아 환경을 구축했기 때문이다.
주류 OSS의 HTTP 서버는 보급률 1위인 아파치, Nginx 등으로 왠지 lighttpd다.삽입에 사용 (메뚜기 63;)경량화된 재미있는 서버.
나는 보도를 아래 세 가지로 나누어 소개하고 싶다.이번에는 cgi로 가져올 때까지.
HTTPS 도입을 통한 보안 강화이 분에 관해서는 Qualys SSL Labs의 SSL Server Test 심층 발굴 기사가 아닐까 싶습니다.
  • 가져오기 ~ cgi
  • 플러그인 가져오기에 대한 설명
  • HTTPS 가져오기를 통한 보안 강화
  • lighttpd 소개


    위키백과
    lighttpd(광각,'Lightty'라고도 부른다)는 안전하고 고속하며 표준을 준수하고 유연한 방향으로 디자인된 웹 서버로 고속성을 중시하는 환경의 최적화를 중시한다.
    메모리 소모량이 적고 CPU 부하가 적은 고속 동작을 목적으로 하기 때문에 부하에 문제가 있거나 정적 내용과 동적 내용을 구별하여 보내는 상황 등에 적합하다.
    기능이 뛰어나고 비대하기 쉬운 HTTP 서버에서는 안전하고 고속, 가벼운 Lighty를 제창하는 서버입니다.시스템에 끼워 넣은 제품과의 통신을 가방으로 들여다보면 간혹 볼 수 있다.
    또한 여기.에서 간단하게 소개한 바와 같이 Chain of Responsibility의 생각, FD가 등록된 이벤트 드라이브, 매크로의 사용 방법이 재미있고 코드를 보면 상당히 재미있다.
    그리고 단식홍으로 이루어진 게 확실해.그렇다면 고속이 매물로 떠오르는 요소는 무엇일까?이쪽도 재밌어요.
    관영 위키도 있어요. 관심 있으신 분은 가세요.

    환경을 구축하다


    Ubuntu 18.04 데스크톱

    설치하다.


    App install 기본값으로 설치할 수 있다니!
    apt install lighttpd
    
    다만 이번에는 원본에서 설치한 것이다.버전은lighttpd-1.4.48입니다.

    구축~설치


    1 . 다운로드여기.부터 시작합니다.
    2 . 필요한 앱을 설치합니다.※1
    sudo apt-get install libpcre3-dev bzip2
    
    3 . 코드에서 다음 조작을 실행합니다
    ./configure
    make
    make install
    
    결과,/usr/local/아래에 프로그램이 설치되었습니다.lighttpd 호스트는 /usr/local/sbin/에 있습니다.
    이렇게 하면 설치할 수 있어요.
    ※ 1 위트하우스 옵션은 어느 것이든 무효화할 수 있지만, 그렇지 않으면 싫기 때문에 이번에도 필요한 앱을 도입했습니다.
    참고:
    1, 4, 48 갈까요?최신 버전과openssl용 모듈,modopenssl을 가져왔습니다.
    그러나 기본값은 유효하지 않습니다.

    부팅


    이런 느낌.설정 파일을 -f에 지정합니다.-D는 전장 운행이다.
    sudo /usr/local/sbin/lighttpd -f /usr/local/www//lighttpd.conf -D
    

    설정


    설정 파일의 샘플은 원본lighttpd-1.4.48/doc/config/, lighttpd-1.4.48/doc/config/conf.d에 많이 있습니다.
    이번 설정에 대해 대략적인 설명을 했다.

    첫 번째 설정: 문서 루트를 위한 첫 페이지 열기


    lighttpd를 편리하게 사용할 수 있는 기능 중 하나는 플러그인이다.가져오기 방법 등은 별도로 설명되며, 기본적으로 다양한 플러그인도 있다.
    다음과 같은 형식으로 설정합니다.최소한 이 두 개가 있으면 탑 페이지를 표시할 수 있다.
    lighttpd.conf
    server.modules = (
            "mod_access",
            "mod_alias",
    )
    
    문서 경로가 서버입니다.문서-rot을 통해 설정합니다.
    lighttpd.conf
    var.server_root = "/usr/local/www/"
    
    server.document-root        = server_root + "/html"
    server.upload-dirs          = ( "/var/cache/lighttpd/uploads" )
    server.errorlog             = "/var/log/lighttpd/error.log"
    server.pid-file             = "/var/run/lighttpd.pid"
    server.username             = "www-data"
    server.groupname            = "www-data"
    server.port                 = 80
    
    index-file.names            = ( "index.php", "index.html" )
    
    아무튼 Hello World 등급의 간단한 것들 index.열릴 것 같아서요.
    근데 이것만 있으면 index.)에서 png이나javascript 등이 있으면 동작하지 않습니다.
    mimetype 설정이 없으면 재미있는 페이지를 만들 수 없습니다.
    전선의 견본을 직접 가져오너라.
    lighttpd.conf
    ## mimetype mapping
    include "conf.d/mime.conf"
    
    mime.conf
    mimetype.assign = (
            ".pcf.Z" => "application/x-font-pcf",
            ".tar.bz2" => "application/x-gtar-compressed",
            ".tar.gz" => "application/x-gtar-compressed",
    中略...
            "README" => "text/plain; charset=utf-8",
            "Makefile" => "text/x-makefile; charset=utf-8",
    
            # enable caching for unknown mime types:
            "" => "application/octet-stream"
    )
    
    준비한 견본, 총 552줄의 Mimetype 정의!
    mimetype의 정의는light의 mime입니다.conf로 확인해 보세요!수준.
    이쪽으로 읽으면 그림과 js가 모두 옵니다!
    나중에 설정/usr/local/www/html하면 다음 페이지는 OK!
    Doxgen 출력 파일에서 TOP을 확인했습니다.

    cgi 설정


    HTTP 서버를 간단하게 활용하세요!그럼 일단 cgi죠?
    스크립트 언어 프로그램은 http를 통해 실행할 수 있습니다.
    우선 설정이다.다음 세 시면 됩니다.이것도 준비된 샘플의 conf에서 끌어온 것이다.

  • server.modules의modcgi 플러그인 가져오기(기본값)

  • alias.url→http://IP/cgi-bin와 환경의 폴더 연결

  • cgi.assign→사용 가능한 확장자 지정
  • lighttpd.conf
    ## cgi.assign
    server.modules += ( "mod_cgi" )
    alias.url = ( "/cgi-bin" => "/usr/local/www/cgi-bin" )
    $HTTP["url"] =~ "^/cgi-bin" {
            cgi.assign                 = ( ".cgi" => "/bin/sh",
                                           ".py"  => "/usr/bin/python3.6")
    }
    
    이로써 http://IP/cgi-bin/スクリプト名 '/usr/local/www/cgi-bin/스크립트 이름' 의 모든 스크립트를 실행합니다.
    (틀려도/bin 따위는 지정하지 마세요.)

    cgi 사양


    HTTP 요청
  • 조회 σ는 환경 변수QUERY_STRING에 저장됩니다.
  • 입력 바디≤표준입력.
  • HTTP 응답
    ヘッダー
    \r\n
    ボディ
    
    의 형식으로 표준 출력을 진행하면 된다.눈썹을 생략해도 lighttpd는 Content-Type:text/plain에 마음대로 눈썹을 추가합니다.
    간단하네요!

    샘플QUERY_STRING 사용법


    ※Python3.6의 샘플.
    QUERY_STRING이 환경 변수로 설정되어 있기 때문에 이렇게 취할 수 있습니다.
    이 견본에서 조회는 키=>value 형식으로 표시됩니다.
    다른 cgi에 대해 help를 출력할 수 있습니다.
    show_query.py
    import sys, os
    
    query_string=os.environ.get("QUERY_STRING")
    
    sys.path.append('..')
    from util.command import show_help
    command=[""]
    help_str='Show query string'
    
    if show_help([help_str] + command):
        sys.exit()
    
    result=''
    if not query_string:
        print('Empty query')
    else:
        queries=query_string.split("&")
        for i, query in enumerate(queries):
            print(i,  '=>' , query)
    
    예컨대http://IP/cgi-bin/show_query.py?test=1&test2=2 방문하면 이렇게 되는 느낌.
    0 => test=1
    1 => test2=2
    

    샘플텍스트 이외의 Content-Type도 사용할 수 있습니다!


    또한 텍스트뿐만 아니라 다른 Content-Type도 지정할 수 있습니다.
    예를 들어 "}"에 Content-Type: text/html 의 스크립트를 표시하고 지정하면 "}"형식이 됩니다.
    이 샘플에서 가져온 cgi의 도움말은 --help에서 얻어서 표로 돌아갑니다.
    help.py
    import sys, re
    #テーブルを作る
    def create_table(fname, help_list):
        result='<tr>\n'
        result+='  <td>' + fname + "</td>\n"
        result+='  <td>' + help_list[0] + "</td>\n"
        result+='  <td> '
        for i, cmd in enumerate(help_list):
            if i == 0:
                continue
            result+=cmd + ' '
        result+='  </td>\n'
        result+='</tr>\n'
        return result
    
    중략
    help.py
    #htmlべた書き
    html='''<!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8" />
        </head>
        <style>
        table{
          border-collapse:collapse;
          margin:0 auto;
        }
        td,th{
          padding:10px;
          border-bottom:solid #ccc;
        }
        th{
          border-bottom:5px solid #ccc;
        }
        table tr th:nth-child(odd),
        table tr td:nth-child(odd){
          background:#e6f2ff;
        }
        </style>
        <body>
          <table>
            <thead>
            <tr>
             <th>cgi name</td>
             <th>usage</td>
             <th>use system command</td>
           </tr>
           </thead>
    '''
    #cgi分のヘルプメッセージをテーブル化
    for cgi, help_list in help_dict.items():
        html+=create_table(cgi, help_list)
    
    html+='''
           </table>
        </body>
    </html>'''
    
    #HTTPヘッダーを表示
    print("Content-Length: " , len(html))
    print("Content-Type: text/html")
    print("")
    #HTTPボディとして作成したhtmlを表示
    print(str(html))
    
    출력은 이런 느낌.

    UI 연관성은 문외한이지만, 모처럼 > 샘플이어서 이쪽 디자인을 완전히 참고했습니다.
    패션 테이블 디자인 샘플 15개

    설정/ cgi 샘플


    도움말에 제공된 cgi 견본과 프로필을 다음과 같이 제출합니다.
    https://github.com/developer-kikikaikai/lighttpd_setting

    도입에 대한 소감.


    환경구조계는 푹 빠진 인상을 주지만 소스 안에 있는 doc/config/conf.d가 충실하기 때문에 쉽게 도입할 수 있다.
    알고 있었어.lighttpd의wiki가 의외로 유지되지 않은 부분이 있었기 때문에 이 충실도는 의외였다.
    또한minetype의 기록은 대단합니다!종합 사이트에서 표현할 수 없는 충실도가 있다.
    계속 검색하고 있으니 이lighttpd 설정 파일을 보도록 하겠습니다.
    그 후python, 너무 즐거웠어요!
    이렇게 하면 학급 설계도 할 수 있고 C와 다른 언어와의 친화력도 좋다고 하니 재미있다.

    참고 자료


    python 초보자의 가져오기 tips처럼 참고
    설치 시
    설치 시 참조
    일부 cgi화의 편리한 명령 일람표
    Linux 자원 모니터링 및 확인 명령 역기
    참조
    패션 테이블 디자인 샘플 15개
    파이썬의 참고서
    • 문자열, 배열 등 기본 정보
    [Python 입문] split 함수를 통해 문자열을 분할하는 방법
    파이썬 스타일의 코드 쓰기
    Python에서 목록(배열)에 요소를 추가하는 응용 프로그램, extend, insert
    • 파일 작업
    Python 작업 파일 사용하기
    Python을 통해 파일, 디렉터리 (폴더) 크기 가져오기
    ・표준 명령 집행 시스템
    ptyhon에서 유닉스 명령 실행하기
    python 3의bytes형과str형의 비교 및 변환 방법
    ・ 기타python 파일 포함
    파이썬의 import 요약
    · 2진 데이터 입력 출력 (cgi에서 mp4 동영상을 발표할 때 조사)
    바이너리 읽기와 쓰기 등 상세한 내용
    표준 출력의 이진 모드로 출력 (linux)

    좋은 웹페이지 즐겨찾기