No wildcard
, ../
Sever block, location block 만 구현함 (Http{}, event{} 은 구현하지 않음)
server 블록에 대한 설정값을 씌이고, 그 다음에 location 관련 내용이 순서대로 적힌다.
순서에 상관없어졌다.
구현된 simple directives
public :
// REVIEW 현재 사용하는 설정
// NOTE - location에서 덮어씌워지는 않는 요소들
std::string mServerName; // localhost
std::string mHost; // def = "0.0.0.0"
uint16_t mPort; // def = 8000;
int mTimeOut; // def = 0s
Path mLocationPath; // def =
// NOTE - location에서 덮어씌워지는 요소들
bool mAutoIndex; // def = false;
Path mRoot; // def =
std::vector<Path> mIndexPages; // def = index.html
Path mErrorPage; // def =
std::vector<std::string> mMethod; // def = GET HEAD PUT POST DELETE OPTIONS
std::vector<std::string> mCgiProgramPath; // def = /bin/etc/php ft_tester/bla_tester
std::vector<std::string> mCgiExtension; // def = .bla .php
Path mAuthBasicUserFile; // def =
std::size_t mClientMaxBodySize; //def 0 NOT checking size
// REVIEW 현재 사용하지 않는 설정
uint64_t mHeadLengthMax; // def = 8k
uint64_t mBodyLengthMax; // def = 1M
};
쓸데없이 공백문자 넣으면 안됨(config파일에서 줄이 끝나는 것은 개행 \\n
으로 끝남)
error block으로 판단하거나, server {} 을 인식하지 못함.
{}는 norminette 맞추듯이 들여쓰기와 개행 모두 맞춰야함
location aaa b{}
띄어쓰기 있으면, nginx에서 에러 나기때문에, 나도 에러처리 함.
소켓 통신을 하기위해서 server configfile
에서 확인해야하는 순서
host + port → socket 1개
host +포트별로 socket이 결정되므로, 포트
server_name 으로 분류
Requeset HTTP 에서 $hostname을 파싱하여 비교한다
location block의 Path 분류
해당 값에 따라서 덮어 씌여질 요소들은 덮어 씌워진다.
config파일을 구성하면 벡터에 어떻게 담기는지
config파일에 설정한 index_pages, error_page 파일이 없으면 그냥 404에러로 한다.
configfile에 값을 추가하고 싶을 때, 프로세스
1. ConfigFile.cpp, ConfigFile.hpp 에서 멤버변수 추가
2. ServerConfigIdx.cpp, .hpp
1. Parsingserverblock 혹은 ParsinglocationBlock에 추가 (둘 다 추가 될 수 도 있음)
2. std::vector인 경우, 추가해주는 느낌을 살리기위해 힘든 코딩.
3. Server_parsing.cpp Server.hpp
locationBlock, ServerBlock에서 한쪽에만 추가
4. Serverblock, locationblock 생성자에서 초기화되는 부분 체크
5. ServerManager.cpp 에서,
`int ServerManager::setServersValue(ConfigFiles *configs)` 할당하는 부분에 추가
6. ShowConfigs(), ShowServers() 함수에서 값 확인! 그러기 위해서 값 추가
tester의 location 파싱방법, nginx의 파싱 방법의 확실히 100퍼센트 다르다.
default server block(일치하는 servername이 없을 때)는 맨 위에 있는 serverblock이다.
ConfigFile &config = configs->mconfigs[configs->mconfigs.size() - 1];
뒤에서 부터 config파일을 server블록에 넣고 있기 떄문에, 맨 처음에 있는 것이 맨 마지막에 들어가기 마련이고, server_name과 일치하는 것이 없으면, 맨 마지막에 있는 것을 가져다 쓰기 때문에, 맨 위에 있는 설정이 적용된다.
configfile에 host에는 localhost도 들어가면 안된다. inet_addr()에서 0xffffffff(error)를 반환함.