1a9643ea8Slogwang# F-Stack Nginx APP Guide 2a9643ea8Slogwang 3a9643ea8SlogwangF-Stack is an open source network framework based on DPDK. F-Stack supports standard Nginx as HTTP framework which means all web application based on HTTP can easily use F-Stack. 4a9643ea8Slogwang 5a9643ea8Slogwang## How does Nginx use F-Stack? 6a9643ea8Slogwang 7a9643ea8Slogwang Nginx APP is in `app/nginx-1.11.10` directory. 8a9643ea8Slogwang 9*40600211Slogwang``` 10a9643ea8Slogwang 11*40600211Slogwang +--------+ 12*40600211Slogwang | 13*40600211Slogwang+------------------------+ | 14*40600211Slogwang channel: socketpair | signal(reload, quit..) 15*40600211Slogwang+------------------------+ | 16*40600211Slogwang | 17*40600211Slogwang +---------v--------+ 18*40600211Slogwang | | 19*40600211Slogwang +----------------+ master process +---------------+ 20*40600211Slogwang | | | | 21*40600211Slogwang | channel +----------+-------+ | 22*40600211Slogwang | | channel | 23*40600211Slogwang | channel | | 24*40600211Slogwang | | | 25*40600211Slogwang +---------+----------+ +----------+--------+ +---------+--------+ 26*40600211Slogwang | | | | | | 27*40600211Slogwang | ff primary process | | worker process | | worker process | 28*40600211Slogwang | | | | | | 29*40600211Slogwang +--------------------+ +-------------------+ +------------------+ 30*40600211Slogwang ff_init +--------+ +-------+ 31*40600211Slogwang loop: | | | | 32*40600211Slogwang handle channel event | fstack | |channel| 33*40600211Slogwang | main | | event | 34*40600211Slogwang | loop | |thread | 35*40600211Slogwang | thread | | | 36*40600211Slogwang | | | | 37*40600211Slogwang +--------+ +-------+ 38*40600211Slogwang woker loop: 39*40600211Slogwang process handle 40*40600211Slogwang cycle channel 41*40600211Slogwang event 42a9643ea8Slogwang 43*40600211Slogwang``` 44a9643ea8Slogwang 45*40600211Slogwang- spawn a new process: ff primary, ff_init(--proc-type=primary);loop(wait channel event). 46*40600211Slogwang- worker process, main thread: ff_init(--proc-type=secondary);ff_run(worker_process_cycle), channel thread: wait channel event. 47a9643ea8Slogwang 48*40600211SlogwangNote that: 49*40600211Slogwang- supported nginx signals: reload(HUP)/reopen(USR1)/stop(TERM). 50a9643ea8Slogwang 51*40600211Slogwang- unsupported nginx signals: NGX_CHANGEBIN_SIGNAL(USR2). 52a9643ea8Slogwang 53*40600211Slogwang- when use `nginx -s reload`, you should make sure that `woker_processes` in nginx.conf and f-stack.conf couldn't be modified. 54a9643ea8Slogwang 55*40600211Slogwang- necessary modifies in nginx.conf: 56a9643ea8Slogwang 57*40600211Slogwang``` 58*40600211Slogwang user root; # root account is necessary. 59*40600211Slogwang fstack_conf f-stack.conf; # path of f-stack configuration file, default: $NGX_PREFIX/conf/f-stack.conf. 60*40600211Slogwang worker_processes 1; # should be equal to the lcore count of `dpdk.lcore_mask` in f-stack.conf. 61a9643ea8Slogwang 62a9643ea8Slogwang events { 63*40600211Slogwang worker_connections 102400; # increase 64a9643ea8Slogwang use kqueue; # use kqueue 65a9643ea8Slogwang } 66a9643ea8Slogwang 67a9643ea8Slogwang sendfile off; # sendfile off 68*40600211Slogwang``` 69a9643ea8Slogwang 70*40600211Slogwang## Nginx compiling 71*40600211Slogwang ./configure --prefix=/usr/local/nginx_fstack --with-ff_module 72*40600211Slogwang make 73*40600211Slogwang make install 74a9643ea8Slogwang 75