在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
Nginx 目前来说已经很流行了,所以打算把现有的Apache先替换一部分,在批量部署和管理方面都要考虑到。因为nginx的所有模块都是静态编译的不像apache那样可以动态添加模块,所以在一开始就要考虑清楚需求,结合现在很火的LAMP模式,其中P最常见的是PHP,目前较好的FastCGI的管理器有spaw-fcgi和php-fpm,而php老版本都是需要源码安装通过打补丁的方式把php-fpm打进去,spaw-fcgi是lighttpd默认的FastCGI管理器,因为牵扯到源码安装,当前的软件包版本在大规模部署起来不是很方便,但是还是有解决办法的。 Nginx安装方法: 1 apt网络安装 修改源列表 vi /etc/apt/sources.list #加入以下源 deb http://nginx.org/packages/debian/ squeeze nginx deb-src http://nginx.org/packages/debian/ squeeze nginx 更新源列表并通过apt安装nginx apt-key add nginx_signing.key apt-get update apt-get install nginx 2 源码编译安装 apt-get install build-essential apt-get install libpcre3 libpcre3-dev zlib1g zlib1g-dev openssl libssl-dev libssl0.9.8 下载最新的稳定版nginx wget http://nginx.org/download/nginx-1.2.3.tar.gz tar zxvf nginx-1.2.3.tar.gz cd nginx-1.2.3 #--help可以看到可以配置的参数 ./configure --help 查看编译可选的配置参数(以下只是一些常用的配置项): --sbin-path=PATH nginx可执行命令文件的路径,没有指定的话,默认<prefix>/sbin/nginx --conf-path=PATH nginx配置文件路径,没有指定的话,默认为<prefix>/conf/nginx.conf --error-log-path=PATH 在nginx.conf中没有使用error_log指定错误日志路径时,默认<prefix>/logs/error.log --http-log-path=PATH 定义被访问文件的日志存放路径,如果在nginx.conf中没有使用access_log指定,默认为<prefix>/logs/access.log --pid-path=PATH 当在nginx.conf中没有使用pid指定pid文件路径时,默认为<prefix>/logs/nginx.pid --lock-path=PATH 锁文件存放路由,如果在nginx.conf中没有指定,则默认为<prefix>/logs/nginx.lock --user=USER 如果在Nginx.conf中没有使用user定义进程运行的属主,则默认为nobody --group=GROUP 如果在Nginx.conf中没有使用user定义进程运行的属组,则默认为nobody --builddir=DIR set build directory --with-rtsig_module 使用rtsig模式 --with-select_module 使用select模式,如果当前平台没有其他有效模式,则默认编译 --without-select_module 禁止select模式 --with-poll_module 使用poll模式,如果当前平台没有其他有效模式,则默认编译 --without-poll_module 禁止poll模式 --with-file-aio enable file AIO support --with-ipv6 开启IPV6支持 --with-debug 开启debug 以下这些模块默认没有开启,可以使用--with命令开启以下模块 --with-http_ssl_module 开启ssl模块 --with-http_realip_module 可以在后端记录客户端IP --with-http_addition_module enable ngx_http_addition_module --with-http_flv_module 开启flv模块 --with-http_mp4_module 开启mp4模块 --with-http_gzip_static_module 开启gzip模块 --with-http_secure_link_module enable ngx_http_secure_link_module --with-http_stub_status_module 开启状态查看模块
以下模块默认是开启的,可以使用--without选项关闭相关模块 --without-http_charset_module disable ngx_http_charset_module --without-http_gzip_module 禁用gzip压缩模块 --without-http_ssi_module 禁用ssl模块 --without-http_userid_module disable ngx_http_userid_module --without-http_access_module 禁用access模块 --without-http_auth_basic_module 禁用auth_basic认证模块 --without-http_autoindex_module 禁用列目录模块 --without-http_geo_module 禁用geo模块 --without-http_map_module 禁用map模块 --without-http_referer_module disable ngx_http_referer_module --without-http_rewrite_module 禁用重定向模块 --without-http_proxy_module 禁用代理模块 --without-http_fastcgi_module 禁用fastcgi模块 --without-http_uwsgi_module disable ngx_http_uwsgi_module --without-http_scgi_module disable ngx_http_scgi_module --without-http_memcached_module disable ngx_http_memcached_module --without-http_limit_conn_module disable ngx_http_limit_conn_module --without-http_limit_req_module disable ngx_http_limit_req_module --without-http_empty_gif_module disable ngx_http_empty_gif_module --without-http_browser_module disable ngx_http_browser_module --without-http_upstream_ip_hash_module 禁用upstream模块 --with-http_perl_module 开启perl模块 编译安装 ./configure --prefix=/etc/nginx/ --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-file-aio --with-ipv6 结果如下图: 编译并安装 make && make install PS:FastCGI回顾 php-fpm PHP5.3版本源码已经默认支持php-fpm了,但是debian6认为它还没经过广泛的测试,所以在debian6的软件仓库中,虽然php版本为5.3.3,但是却没包含php-fpm,如果不想手工编译安装php的话可以换一个源。 vi /etc/apt/sources.list deb http://packages.dotdeb.org stable all deb-src http://packages.dotdeb.org stable all 更新源列表,安装php5-fpm apt-get update wget http://www.dotdeb.org/dotdeb.gpg cat dotdeb.gpg | apt-key add - apt-get install php5-fpm 安装其他常用php5组件 apt-get install php5 php5-cgi php5-cli php5-mysql php5-memcache 启动php-fpm /etc/init.d/php5-fpm start 这样的话最基本的nginx+php环境就搭建完毕了。 Nginx配置文件粗解 配置文件主要参照编译完成后生成的默认配置文件。 主模块的配置选项 user指令设置进程以什么用户运行,在源码编译安装时指定的nginx用户,如果在编译时没有指定,默认是nobody账户,在配置文件中此行处于注释状态, user 指令可以设置两个参数,第一个指定进程所属用户,第二个是可选,指定进程所属组 user nginx nobody; 设置工作进程数,一个工作进程为一个单线程,在CPU密集型环境中,可以设置worker_processes数目为CPU核数 worker_processes 4; 指定nginx错误日志文件的位置,如果要禁止错误日志使用error_log /dev/null,error_log可以存在于不同的字段main、http、server等,文件后面可以指定记录的日志的默认等级。 error_log logs/error.log; 设置pid文件路径,可以使用kill命令发送相关信号 pid logs/nginx.pid; event模块配置选项,event模块主要控制nginx处理连接的方式 events { #如果在configure时指定的不止一个事件模型,可以通过use告诉nginx要使用哪一个模型:seletc、poll、kqueue、epoll、rtsig、/dev/poll、eventport等 use epoll; #worker_connections和worker_processes可以计算你的理论最大链接数, worker_connections*worker_processes worker_connections 1024; } http模块里面主要是对http服务器相关属性进行设置
http { #可以用include指令包含一些其他文件,支持通配符,可以使用绝对路径,也可以使用相对路径,相对路径以nginx.conf为根据 include mime.types; #设置默认的MIME类型 default_type application/octet-stream; #描述记录日志的格式,在定义格式时可以使用一些变量,各个变了的含义可以从各个模块汇总查找 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; #指定访问日志的路径和格式,缓冲区大小 access_log logs/access.log main; #sendfile拷贝文件在内核态完成,更加高效 sendfile on; #tcp_nopush on; #可以设置两个值,第一个表示客户端与服务器长连接的超时时间,超过这个时间,服务器将关闭连接。第二个值指定的应答头中keep-alive中timeout的值,让浏览器知道什么时候关闭连接。 keepalive_timeout 65; #开启gzip压缩 gzip on; #在三次握手时,发送给客户端应答后的超时时间,目前还没进入连接状态,只完成了两次握手,如果在规定时间没收到应答包,nginx将关闭链接 send_timeout 30 server { xxx } } server模块嵌在http模块中,主要用来配置虚拟主机 server { #指定server字段中可以被访问到的ip地址及端口 listen 80; #将http请求的主机头与server中的server_name参数进行匹配,并找出第一个结果,如果没有server_name参数匹配上,则第一个出现listen的server将被匹配,多域名用空格分割 server_name www.nginx.com; #设个指令是应答头重的content-type字段使用指定的编码集,off表示不在应答头重添加content-type信息 charset off; #指定www.nginx.com域名的访问日志路径及格式 access_log logs/host.access.log main; #如果在url中没有指定文件,则设置一个默认主页,可以设置多个文件,空格分开,可以在http、server、location中设置 index index.php index.htm; #根据URL的不同需求进行配置,可以使用字符串和正则匹配,最确切的匹配被使用,搜索到第一个后会停止 # ~* 不区分大小写;~ 区分大小写;^~ 禁止在字符串匹配后检查正则;= 在URL和location之间精确匹配,匹配完成后不做额外搜索。 location /i/ { #请求到达后的文件根目录,在请求中root会把location匹配的值加到root指定的值后面,请求/i/a.php,则会是/html/i/a.php响应 root html; #在location中设置index index index.html index.htm; } #为错误代码指定相应的错误界面,可以用在http、server、location字段中。 error_page 404 /404.html; # redirect server error pages to the static page /50x.html error_page 500 502 503 504 /50x.html; #精确匹配50x.html,真实响应是/html/50x.html location = /50x.html { root html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 location ~ \.php$ { proxy_pass http://127.0.0.1; } #配置php脚本传至fastcgi location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; #/scripts是php脚本所在的目录 fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; include fastcgi_params; } #拒绝访问.htaccess文件 location ~ /\.ht { deny all; } } |
请发表评论