Nginx编译与安装
安装与配置
相关Linux内核参数的优化
在/etc/sysctl.conf
中添加:
# Add net.ipv4.tcp_max_syn_backlog = 65536 net.core.netdev_max_backlog = 32768 net.core.somaxconn = 32768 net.core.wmem_default = 8388608 net.core.rmem_default = 8388608 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.ipv4.tcp_timestamps = 0 net.ipv4.tcp_synack_retries = 2 net.ipv4.tcp_syn_retries = 2 net.ipv4.tcp_tw_recycle = 1 # net.ipv4.tcp_tw_len = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_men = 94500000 915000000 927000000 net.ipv4.tcp_max_orphans = 3276800 # net.ipv4.tcp_fin_timeout = 30 # net.ipv4.tcp_keepalive_time = 120 net.ipv4.ip_local_port_range = 1024 65535 #
使配置生效:
/sbin/sysctl -p
安装
configure配置:
-
--prefix=<path>
:Nginx安装路径。如果没有指定,默认为 /usr/local/nginx。 -
--sbin-path=<path>
:Nginx可执行文件安装路径。只能安装时指定,如果没有指定,默认为<prefix>/sbin/nginx。 -
--conf-path=<path>
:在没有给定-c选项下默认的nginx.conf的路径。如果没有指定,默认为<prefix>/conf/nginx.conf。 -
--pid-path=<path>
:在nginx.conf中没有指定pid指令的情况下,默认的nginx.pid的路径。如果没有指定,默认为 <prefix>/logs/nginx.pid。 -
--lock-path=<path>
:nginx.lock文件的路径。 -
--error-log-path=<path>
:在nginx.conf中没有指定error_log指令的情况下,默认的错误日志的路径。如果没有指定,默认为 <prefix>/logs/error.log。 -
--http-log-path=<path>
:在nginx.conf中没有指定access_log指令的情况下,默认的访问日志的路径。如果没有指定,默认为 <prefix>/logs/access.log。 -
--user=<user>
:在nginx.conf中没有指定user指令的情况下,默认的nginx使用的用户。如果没有指定,默认为 nobody。 -
--group=<group>
:在nginx.conf中没有指定user指令的情况下,默认的nginx使用的组。如果没有指定,默认为 nobody。 -
--builddir=DIR
:指定编译的目录 -
--with-rtsig_module
:启用 rtsig 模块 -
--with-select_module
或–without-select_module
:允许或不允许开启SELECT模式,如果 configure 没有找到更合适的模式,比如:kqueue(sun os),epoll (linux kenel 2.6+), rtsig(实时信号)或者/dev/poll(一种类似select的模式,底层实现与SELECT基本相 同,都是采用轮训方法) SELECT模式将是默认安装模式 -
--with-poll_module
或–without-poll_module
:Whether or not to enable the poll module. This module is enabled by default if a more suitable method such as kqueue, epoll, rtsig or /dev/poll is not discovered by configure. -
--with-http_ssl_module
:开启HTTP SSL模块,使NGINX可以支持HTTPS请求。这个模块需要已经安装了OPENSSL,在DEBIAN上是libssl -
--with-http_realip_module
:启用 ngx_http_realip_module -
--with-http_addition_module
:启用 ngx_http_addition_module -
--with-http_sub_module
:启用 ngx_http_sub_module -
--with-http_dav_module
:启用 ngx_http_dav_module -
--with-http_flv_module
:启用 ngx_http_flv_module -
--with-http_stub_status_module
:启用 「server status」 页 -
--without-http_charset_module
:禁用 ngx_http_charset_module -
--without-http_gzip_module
:禁用 ngx_http_gzip_module. 如果启用,需要 zlib 。 -
--without-http_ssi_module
:禁用 ngx_http_ssi_module -
--without-http_userid_module
:禁用 ngx_http_userid_module -
--without-http_access_module
:禁用 ngx_http_access_module -
--without-http_auth_basic_module
:禁用 ngx_http_auth_basic_module -
--without-http_autoindex_module
:禁用 ngx_http_autoindex_module -
--without-http_geo_module
:禁用 ngx_http_geo_module -
--without-http_map_module
:禁用 ngx_http_map_module -
--without-http_referer_module
:禁用 ngx_http_referer_module -
--without-http_rewrite_module
:禁用 ngx_http_rewrite_module. 如果启用需要 PCRE 。 -
--without-http_proxy_module
:禁用 ngx_http_proxy_module -
--without-http_fastcgi_module
:禁用 ngx_http_fastcgi_module -
--without-http_memcached_module
:禁用 ngx_http_memcached_module -
--without-http_limit_zone_module
:禁用 ngx_http_limit_zone_module -
--without-http_empty_gif_module
:禁用 ngx_http_empty_gif_module -
--without-http_browser_module
:禁用 ngx_http_browser_module -
--without-http_upstream_ip_hash_module
:禁用 ngx_http_upstream_ip_hash_module -
--with-http_perl_module
:启用 ngx_http_perl_module -
--with-perl_modules_path=PATH
:指定 perl 模块的路径 -
--with-perl=PATH
:指定 perl 执行文件的路径 -
--http-log-path=PATH
:指定access log 文件的路径 -
--http-client-body-temp-path=PATH
:指定http客户端请求缓存文件存放的目录 -
--http-proxy-temp-path=PATH
:指定http反向代理缓存文件存放的目录 -
--http-fastcgi-temp-path=PATH
:指定http fastCGI缓存文件存放的目录 -
--without-http
:禁用 HTTP server -
--with-mail
:启用 IMAP4/POP3/SMTP 代理模块 -
--with-mail_ssl_module
:启用 ngx_mail_ssl_module -
--with-cc=PATH
:指定 C 编译器的路径 -
--with-cpp=PATH
:指定 C 预处理器的路径 -
--with-cc-opt=OPTIONS
:Additional parameters which will be added to the variable CFLAGS. With the use of the system library PCRE in FreeBSD, it is necessary to indicate –with-cc-opt=」-I /usr/local/include」. If we are using select() and it is necessary to increase the number of file descriptors, then this also can be assigned here: –with-cc-opt=」-D FD_SETSIZE=2048″. -
--with-ld-opt=OPTIONS
:Additional parameters passed to the linker. With the use of the system library PCRE in FreeBSD, it is necessary to indicate –with-ld-opt=」-L /usr/local/lib」. -
--with-cpu-opt=CPU
:为特定的 CPU 编译,有效的值包括:pentium, pentiumpro, pentium3, pentium4, athlon, opteron, amd64, sparc32, sparc64, ppc64 -
--without-pcre
:禁止 PCRE 库的使用。同时也会禁止 HTTP rewrite 模块。在 「location」 配置指令中的正则表达式也需要 PCRE 。 -
--with-pcre=DIR
:指定 PCRE 库的源代码的路径。 -
--with-pcre-opt=OPTIONS
:设置pcre库的源代码路径 -
--with-md5=DIR
:设置MD5库的源代码 路径 -
--with-md5-opt=OPTIONS
:MD5库的额外编译选项 -
--with-md5-asm
:MD5汇编源码 -
--with-sha1=DIR
:sha1库的 源代码 路径 -
--with-sha1-opt=OPTIONS
:sha1库的 额外编译选项 -
--with-sha1-asm
:使用sha1 汇编源码 -
--with-zlib=DIR
:zlib库的源代码路径 -
--with-zlib-opt=OPTIONS
:zlib库的编译选项 -
--with-zlib-asm=CPU
:zlib库针对CPU优化,值有: pentium, pentiumpro -
--with-openssl=DIR
:openssl库的源代码路径 -
--with-openssl-opt=OPTIONS
:openssl编译选项 -
--with-debug
:启用调试日志 -
--add-module=PATH
:增加第三方模块所在的路径
在不同版本间,选项可能会有些许变化,请总是使用./configure –help
命令来检查。
一个编译方案的例子:
./configure \ --prefix=/usr \ --sbin-path=/usr/sbin/nginx \ --conf-path=/etc/nginx/nginx.conf \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --pid-path=/var/run/nginx/nginx.pid \ --lock-path=/var/lock/nginx.lock \ --user=nginx \ --group=nginx \ --with-http_ssl_module \ --with-http_stub_status_module \ --with-http_gzip_static_module \ --http-client-body-temp-path=/var/tmp/nginx/client/ \ --http-proxy-temp-path=/var/tmp/nginx/proxy/ \ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \ --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \ --with-pcre=../pcre-7.8 --with-zlib=../zlib-1.2.3
启动、停止、重启
先看一下help:
$ nginx -h nginx version: nginx/1.1.19 Usage: nginx [-?hvVtq] [-s signal] [-c filename] [-p prefix] [-g directives] Options: -?,-h : this help -v : show version and exit -V : show version and configure options then exit -t : test configuration and exit -q : suppress non-error messages during configuration testing -s signal : send signal to a master process: stop, quit, reopen, reload -p prefix : set prefix path (default: /etc/nginx/) -c filename : set configuration file (default: /etc/nginx/nginx.conf) -g directives : set global directives out of configuration file
从上面可以看出来配置文件都在/etc/nginx
目录下。
先检查配置文件是否正确:
$ sudo nginx -t -c /etc/nginx/nginx.conf nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
如果有错的话会报错在第几行。
ubuntu环境下基本命令:
sudo /etc/init.d/nginx stop sudo /etc/init.d/nginx start sudo /etc/init.d/nginx restart
其他方法:
启动:
nginx -c /etc/nginx/nginx.conf
停止用kill
:
等待退出:
kill - QUIT <进程号> # 或 kill - QUIT `/usr/local/webserver/nginx/logs/nginx.pid`
马上退出:
kill - TERM <进程号> # 或 kill - TERM `/usr/local/webserver/nginx/logs/nginx.pid` # 或 kill - INT <进程号> # 或 kill - INT `/usr/local/webserver/nginx/logs/nginx.pid`
强杀:
kill -9 <进程号>
一个linux启动脚本的例子:
vi /etc/init.d/nginx #!/bin/bash # #chkconfig: - 85 15 #description: this script use to manage nginx process. # #set -x . /etc/rc.d/init.d/functions procnum=`ps -ef |grep "/usr/local/nginx/sbin/nginx"|grep -v "grep"|wc -l` start () { if [ "$procnum" -eq 1 -a -f /usr/local/nginx/logs/nginx.pid ]; then echo -n "Starting nginx:" success echo else /usr/local/nginx/sbin/nginx if [ "$?" -eq 0 ]; then echo -n "Starting nginx:" success echo else echo -n "Starting nginx:" failure echo exit 4 fi fi } stop () { if [ "$procnum" -eq 1 -a -f /usr/local/nginx/logs/nginx.pid ]; then /usr/local/nginx/sbin/nginx -s stop if [ "$?" -eq 0 ]; then echo -n "Stopping nginx:" success echo else echo -n "Stopping nginx:" failure echo exit 3 fi else echo -n "Stopping nginx:" success echo fi } case $1 in start) start ;; stop) stop ;; restart) stop sleep 1 start ;; reload) if [ "$procnum" -eq 1 -a -f /usr/local/nginx/logs/nginx.pid ]; then /usr/local/nginx/sbin/nginx -s reload else echo "nginx is not running!please start nginx first..." exit 2 fi ;; status) if [ "$procnum" -eq 1 -a -f /usr/local/nginx/logs/nginx.pid ]; then echo "nginx is running..." else echo "nginx is not running..." fi ;; *) echo "Usage : nginx [ start|stop|reload|restart|status ]" exit 1 ;; esac