1、Nginx 在启动后,会有一个 master 进程和多个相互独立的 worker 进程。
2、接收来自外界的信号,向各worker进程发送信号,每个进程都有可能来处理这个连接。
3、master 进程能监控 worker 进程的运行状态,当 worker 进程退出后(异常情况下),会自动启动新的 worker 进程。
一、创建nginx启动脚本
说明:nginx默认没有启动脚本(apache可以通过apachetl来操作);该脚本包含有start、stop、reload、restart、configtest功能
vim /etc/init.d/nginx
内容如下:
#!/bin/bash# chkconfig: - 30 21# description: http service.# Source Function Library. /etc/init.d/functions# Nginx SettingsNGINX_SBIN="/usr/local/nginx/sbin/nginx"NGINX_CONF="/usr/local/nginx/conf/nginx.conf"NGINX_PID="/usr/local/nginx/logs/nginx.pid"RETVAL=0prog="Nginx"start() { echo -n $"Starting $prog: " mkdir -p /dev/shm/nginx_temp daemon $NGINX_SBIN -c $NGINX_CONF RETVAL=$? echo return $RETVAL}stop() { echo -n $"Stopping $prog: " killproc -p $NGINX_PID $NGINX_SBIN -TERM rm -rf /dev/shm/nginx_temp RETVAL=$? echo return $RETVAL}reload(){ echo -n $"Reloading $prog: " killproc -p $NGINX_PID $NGINX_SBIN -HUP RETVAL=$? echo return $RETVAL}restart(){ stop start}configtest(){ $NGINX_SBIN -c $NGINX_CONF -t return 0}case "$1" in start) start ;; stop) stop ;; reload) reload ;; restart) restart ;; configtest) configtest ;; *) echo $"Usage: $0 {start|stop|reload|restart|configtest}" RETVAL=1esacexit $RETVAL
二、 授予755权限,加入系统服务,开机启动
命令 chmod 755 /etc/init.d/nginx
命令 chkconfig --add nginx
命令 chkconfig nginx on
注:检查配置文件命令 service nginx configtest
/usr/local/nginx/sbin/nginx -t
三、编辑配置nginx主配置文件
说明:默认的配置文件,分两个部分:整体配置和server配置(即虚拟主机部分)
vim /usr/local/nginx/conf/nginx.conf
内容如下:
user nobody nobody;worker_processes 2;error_log /usr/local/nginx/logs/nginx_error.log crit;# 如果遇到较为少见的错误,我们可以修改nginx的错误日志级别,使其记录最多的日志内容,这样方便我们排查错误,将 crit 改为 debugpid /usr/local/nginx/logs/nginx.pid;worker_rlimit_nofile 51200;events{ use epoll; worker_connections 6000;}http{ include mime.types; default_type application/octet-stream; server_names_hash_bucket_size 3526; server_names_hash_max_size 4096; log_format combined_realip '$remote_addr $http_x_forwarded_for [$time_local]' '$host "$request_uri" $status' '"$http_referer" "$http_user_agent"'; sendfile on; tcp_nopush on; keepalive_timeout 30; client_header_timeout 3m; client_body_timeout 3m; send_timeout 3m; connection_pool_size 256; client_header_buffer_size 1k; large_client_header_buffers 8 4k; request_pool_size 4k; output_buffers 4 32k; postpone_output 1460; client_max_body_size 10m; client_body_buffer_size 256k; client_body_temp_path /usr/local/nginx/client_body_temp; proxy_temp_path /usr/local/nginx/proxy_temp; fastcgi_temp_path /usr/local/nginx/fastcgi_temp; fastcgi_intercept_errors on; tcp_nodelay on; gzip on; gzip_min_length 1k; gzip_buffers 4 8k; gzip_comp_level 5; gzip_http_version 1.1; gzip_types text/plain application/x-javascript text/css text/htm application/xml;server{ listen 80; server_name localhost; index index.html index.htm index.php; root /usr/local/nginx/html; location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/tmp/php-fcgi.sock; # nginx.conf和php-fpm.conf监听方式必须统一,否则会报502,而且socket文件的路径一定要对 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name; }}}
日志格式:
$remote_addr 与$http_x_forwarded_for 用以记录客户端的ip地址$remote_user :用来记录客户端用户名称$time_local : 用来记录访问时间与时区$request : 用来记录请求的url与http协议$status : 用来记录请求状态;成功是200
四、一般采用主配置文件中开启子配置文件的方法
说明:主配置文件中,主机部分无需填写,新建一个虚拟主机配置文件
【主配置文件】:
vim /usr/local/nginx/conf/nginx.conf
内容如下:
user nobody nobody;worker_processes 2;error_log /usr/local/nginx/logs/nginx_error.log crit;pid /usr/local/nginx/logs/nginx.pid;worker_rlimit_nofile 51200;events{ use epoll; worker_connections 6000;}http{ include mime.types; default_type application/octet-stream; server_names_hash_bucket_size 3526; server_names_hash_max_size 4096; log_format combined_realip '$remote_addr $http_x_forwarded_for [$time_local]' '$host "$request_uri" $status' '"$http_referer" "$http_user_agent"'; sendfile on; tcp_nopush on; keepalive_timeout 30; client_header_timeout 3m; client_body_timeout 3m; send_timeout 3m; connection_pool_size 256; client_header_buffer_size 1k; large_client_header_buffers 8 4k; request_pool_size 4k; output_buffers 4 32k; postpone_output 1460; client_max_body_size 10m; client_body_buffer_size 256k; client_body_temp_path /usr/local/nginx/client_body_temp; proxy_temp_path /usr/local/nginx/proxy_temp; fastcgi_temp_path /usr/local/nginx/fastcgi_temp; fastcgi_intercept_errors on; tcp_nodelay on; gzip on; gzip_min_length 1k; gzip_buffers 4 8k; gzip_comp_level 5; gzip_http_version 1.1; gzip_types text/plain application/x-javascript text/css text/htm application/xml; include vhosts/*.conf;}
【子配置文件】
说明:/usr/local/nginx/conf目录下创建vhosts目录(所有虚拟主机配置文件在该目录下),并创建一个默认配置文件default.conf
配置文件一:
说明:default_server,无论主机解析什么域名,都会走这个虚拟主机和配置;root,为了限制上面的情况,把一台默认主机弄成403forbidden,比如root弄到/tmp/1233目录;location php,无需再配置
命令 mkdir /tmp/1233
vim /usr/local/nginx/conf/vhosts/default.conf
内容如下:
server{ listen 80 default_server; server_name localhost; index index.html index.htm index.php; root /tmp/1233; deny all;}
配置文件二:
说明:真正虚拟主机配置文件;目录可以设置为discuz论坛目录,php-fpm采用ip+端口的监听方式(socket方式会502报错)
vim /usr/local/nginx/conf/vhosts/huangzhenping.conf
内容如下:
server{ listen 80; server_name huangzhenping.cn; index index.html index.htm index.php; root /data/www; location ~ \.php$ { include fastcgi_params; #fastcgi_pass unix:/tmp/php-fcgi.sock; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /data/www$fastcgi_script_name; }}
location规则说明:
= 开头表示精确匹,如 A 中只匹配根目录结尾的请求,后面不能带任何字符串
^~ 开头表示uri以某个常规字符串开头,不是正则匹配
~ 开头表示区分大小写的正则匹配
~* 开头表示不区分大小写的正则匹配
/ 通用匹配,如果没有其它匹配,任何请求都会匹配到
@ 定义一个命名的 location,使用在内部定向时,例如 error_page,try_files
顺序优先级: (location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > (/)