安装nginx 选择稳定版本
我们编译安装nginx来定制自己的模块。 •机器CentOS 6.6 x86_64。 •软件版本:Nginx 1.9.9
yum 一键安装nginx yum安装rpm包会比编译安装简单很多,默认会安装许多模块,帮我们解决到很多依赖的安装包,但缺点是如果你想以后安装第三方模块那就没办法了。
使用Nginx官方源,Epel扩展库和remi源,remi源基于epel,必须先安装epel源,remi包含php-fpm,mysql-server5.5,如果只需要php-fpm可以单独安装php-fpm后禁用此源.
第一种方法:
1 2 3 4 5 6 [nginx] name=nginx repo baseurl=http: gpgcheck=0 enabled=1
剩下的就yum install nginx搞定,也可以yum install nginx-1.9.9安装指定版本(前提是你去packages里看到有对应的版本,默认是最新版稳定版)
第二种方法:
各节点时间同步1 2 3 4 5 6 7 [root@nginx ~] 安装EPEL源: rpm -Uvh http: yum clean all yum makecache yum install -y nginx service nginx start
nginx编译安装: 首先安装缺少的依赖包:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 yum -y install gcc gcc-c++ make libtool zlib zlib-devel openssl openssl-devel pcre pcre-devel ``` 这些软件包如果yum上没有的话可以下载源码来编译安装,只是要注意编译时默认安装的目录,确保下面在安装nginx时能够找到这些动态库文件(ldconfig)。 下载nginx地址:[nginx](http: 新建nginx用户与组 ``` bash groupadd www useradd -s /sbin/nologin -g www www 编译配置文件 tar -zxvf nginx-1.9 .9 .tar.gz cd nginx-1.9 .9 / ./configure --user=www --group=www --prefix=/usr/local/nginx --error-log-path=/var /log/nginx/error.log --http-log-path=/var /log/nginx/access.log --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-http_realip_module make && make install 常用编译选项说明 nginx大部分常用模块,编译时./configure –help以–without开头的都默认安装。 --prefix=PATH : 指定nginx的安装目录。默认 /usr/local/nginx --conf-path=PATH : 设置nginx.conf配置文件的路径。nginx允许使用不同的配置文件启动,通过命令行中的-c选项。默认为prefix/conf/nginx.conf --user=name: 设置nginx工作进程的用户。安装完成后,可以随时在nginx.conf配置文件更改user指令。默认的用户名是nobody。--group=name类似 --with-pcre : 设置PCRE库的源码路径,如果已通过yum方式安装,使用--with-pcre自动找到库文件。使用--with-pcre=PATH时,需要从PCRE网站下载pcre库的源码(版本4.4 - 8.30 )并解压,剩下的就交给Nginx的./configure和make来完成。perl正则表达式使用在location指令和 ngx_http_rewrite_module模块中。 --with-zlib=PATH : 指定 zlib(版本1.1 .3 - 1.2 .5 )的源码解压目录。在默认就启用的网络传输压缩模块ngx_http_gzip_module时需要使用zlib 。 --with-http_ssl_module : 使用https协议模块。默认情况下,该模块没有被构建。前提是openssl与openssl-devel已安装 --with-http_stub_status_module : 用来监控 Nginx 的当前状态 --with-http_realip_module : 通过这个模块允许我们改变客户端请求头中客户端IP地址值(例如X-Real-IP 或 X-Forwarded-For ),意义在于能够使得后台服务器记录原始客户端的IP地址 --add-module=PATH : 添加第三方外部模块,如nginx-sticky-module-ng或缓存模块。每次添加新的模块都要重新编译(Tengine可以在新加入module时无需重新编译) 再提供一种编译方案: ./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 启动nginx服务 /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx cp nginx.init /etc/init.d/nginx 启动脚本 chmod +x /etc/init.d/nginx nginx启动脚本 nginx ```php . /etc/rc.d/init.d/functions . /etc/sysconfig/network [ "$NETWORKING" = "no" ] && exit 0 nginx="/usr/sbin/nginx" prog=$(basename $nginx ) sysconfig="/etc/sysconfig/$prog" lockfile="/var/lock/subsys/nginx" pidfile="/var/run/${prog}.pid" NGINX_CONF_FILE="/etc/nginx/nginx.conf" [ -f $sysconfig ] && . $sysconfig start() { [ -x $nginx ] || exit 5 [ -f $NGINX_CONF_FILE ] || exit 6 echo -n $"Starting $prog: " daemon $nginx -c $NGINX_CONF_FILE retval=$? echo [ $retval -eq 0 ] && touch $lockfile return $retval } stop() { echo -n $"Stopping $prog: " killproc -p $pidfile $prog retval=$? echo [ $retval -eq 0 ] && rm -f $lockfile return $retval } restart() { configtest_q || return 6 stop start } reload() { configtest_q || return 6 echo -n $"Reloading $prog: " killproc -p $pidfile $prog -HUP echo } configtest() { $nginx -t -c $NGINX_CONF_FILE } configtest_q() { $nginx -t -q -c $NGINX_CONF_FILE } rh_status() { status $prog } rh_status_q() { rh_status >/dev/null 2 >&1 } upgrade() { local oldbin_pidfile="${pidfile}.oldbin" configtest_q || return 6 echo -n $"Upgrading $prog: " killproc -p $pidfile $prog -USR2 retval=$? sleep 1 if [[ -f ${oldbin_pidfile} && -f ${pidfile} ]]; then killproc -p $oldbin_pidfile $prog -QUIT success $"$prog online upgrade" echo return 0 else failure $"$prog online upgrade" echo return 1 fi } reopen_logs() { configtest_q || return 6 echo -n $"Reopening $prog logs: " killproc -p $pidfile $prog -USR1 retval=$? echo return $retval } case "$1" in start) rh_status_q && exit 0 $1 ;; stop) rh_status_q || exit 0 $1 ;; restart|configtest|reopen_logs) $1 ;; force-reload|upgrade) rh_status_q || exit 7 upgrade ;; reload) rh_status_q || exit 7 $1 ;; status|status_q) rh_$1 ;; condrestart|try -restart) rh_status_q || exit 7 restart ;; *) echo $"Usage: $0 {start|stop|reload|configtest|status|force-reload|upgrade|restart|reopen_logs}" exit 2 esac
启动关闭nginx 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 或 pkill nginx 或 kill -HUP `cat /usr/local/nginx-1.6 /logs/nginx.pid` 设置开机启动 chkconfig --level 345 nginx on chkconfig nginx on chkconfig nginx --list nginx 0 :关闭 1 :关闭 2 :启用 3 :启用 4 :启用 5 :启用 6 :关闭 当然也可以将 nginx 作为系统服务管理,下载 nginx 到/etc/init.d/,修改里面的路径然后赋予可执行权限。 service nginx {start|stop|status|restart|reload|configtest}
nginx.conf配置文件 Nginx配置文件主要分成四部分:main(全局设置)、server(主机设置)、upstream(上游服务器设置,主要为反向代理、负载均衡相关配置)和 location(URL匹配特定位置后的设置),每部分包含若干个指令。main部分设置的指令将影响其它所有部分的设置;server部分的指令主要用于指定虚拟主机域名、IP和端口;upstream的指令用于设置一系列的后端服务器,设置反向代理及后端服务器的负载均衡;location部分用于匹配网页位置(比如,根目录“/”,“/images”,等等)。他们之间的关系式:server继承main,location继承server;upstream既不会继承指令也不会被继承。它有自己的特殊指令,不需要在其他地方的应用。
当前nginx支持的几个指令上下文:
配置文件 下面的nginx.conf简单的实现nginx在前端做反向代理服务器的例子,处理js、png等静态文件,jsp等动态请求转发到其它服务器tomcat:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 user www www; worker_processes 2 ; error_log logs/error.log; pid logs/nginx.pid; events { use epoll ; worker_connections 2048 ; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65 ; gzip on; gzip_min_length 1 k; gzip_buffers 4 16 k; gzip_http_version 1.0 ; gzip_comp_level 6 ; gzip_types text/html text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml; gzip_vary on; client_max_body_size 10 m; client_body_buffer_size 128 k; proxy_connect_timeout 75 ; proxy_send_timeout 75 ; proxy_read_timeout 75 ; proxy_buffer_size 4 k; proxy_buffers 4 32 k; proxy_busy_buffers_size 64 k; proxy_temp_file_write_size 64 k; proxy_temp_path /usr/local/nginx/proxy_temp 1 2 ; upstream backend { server 192.168 .10 .100 :8080 max_fails=2 fail_timeout=30 s ; server 192.168 .10 .101 :8080 max_fails=2 fail_timeout=30 s ; } server { listen 80 ; server_name itoatest.example.com; root /apps/oaapp; charset utf-8 ; access_log logs/host.access.log main; location / { root /apps/oaapp; index index.jsp index.html index.htm; proxy_pass http: proxy_redirect off; proxy_set_header Host $host ; proxy_set_header X-Real-IP $remote_addr ; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; } location ~* /download/ { root /apps/oa/fs; } location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ { root /apps/oaapp; expires 7 d; } location /nginx_status { stub_status on; access_log off; allow 192.168 .10 .0 /24 ; deny all; } location ~ ^/(WEB-INF)/ { deny all; } error_page 500 502 503 504 /50 x.html; location = /50 x.html { root html; } } } 这里我整理了一份每个含义的详解: user www www; worker_processes 8 ; error_log /var /log/nginx/error.log info; pid /var /run/nginx.pid; worker_rlimit_nofile 65535 ; events { use epoll ;worker_connections 65535 ; } http { include mime.types; default_type application/octet-stream; server_names_hash_bucket_size 128 ; client_header_buffer_size 32 k; large_client_header_buffers 4 64 k; client_max_body_size 8 m; sendfile on; autoindex on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 120 ; fastcgi_connect_timeout 300 ; fastcgi_send_timeout 300 ; fastcgi_read_timeout 300 ; fastcgi_buffer_size 64 k; fastcgi_buffers 4 64 k; fastcgi_busy_buffers_size 128 k; fastcgi_temp_file_write_size 128 k; gzip on; gzip_min_length 1 k; gzip_buffers 4 16 k; gzip_http_version 1.0 ; gzip_comp_level 2 ; gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on; upstream blog.kern.com { server 192.168 .80 .121 :80 weight=3 ; server 192.168 .80 .122 :80 weight=2 ; server 192.168 .80 .123 :80 weight=3 ; } server { listen 80 ; server_name www.kern.com ; index index.html index.htm index.php; root /data/www/ha97; location ~ .*\.(php|php5)?$ { fastcgi_pass 127.0 .0 .1 :9000 ; fastcgi_index index.php; include fastcgi.conf;} location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 10 d; } location ~ .*\.(js|css)?$ { expires 1 h; } log_format access '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $http_x_forwarded_for' ;access_log /var /log/nginx/ha97access.log access; location / { proxy_pass http: proxy_redirect off; proxy_set_header X-Real-IP $remote_addr ; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ; proxy_set_header Host $host ; client_max_body_size 10 m; client_body_buffer_size 128 k; proxy_connect_timeout 90 ; proxy_send_timeout 90 ; proxy_read_timeout 90 ; proxy_buffer_size 4 k; proxy_buffers 4 32 k; proxy_busy_buffers_size 64 k; proxy_temp_file_write_size 64 k; } location /NginxStatus { stub_status on; access_log on; auth_basic "NginxStatus" ; auth_basic_user_file conf/htpasswd; } location ~ .(jsp|jspx|do )?$ { proxy_set_header Host $host ; proxy_set_header X-Real-IP $remote_addr ; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ; proxy_pass http: } location ~ .*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ { expires 15 d; } location ~ .*.(js|css)?$ { expires 1 h; } } }
Nginx + Tomcat做负载均衡 Nginx负载均衡,其实主要就是用upstream、server指令,再配以权重等等参数。如果为了让nginx支持session共享,还需要额外增加一个模块。
一、Nginx负载均衡 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 在http{…}中配置一个upstream{…},参考如下: 引用 upstream tomcat-account { server 10.11 .155 .26 :8080 weight=1 ; server 10.11 .155 .41 :8080 weight=1 ; } 接着修改location节点,配置代理: 引用 server { listen 80 ; server_name 10001. test.intranet; location / { index index.html index.php index.jsp index.htm; proxy_pass http: proxy_ignore_client_abort on; proxy_redirect off; proxy_set_header Host $host ; proxy_set_header X-Real-IP $remote_addr ; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ; } } ``` 这里可以写自己的内网域名也可以写IP 当访问根路径时,会轮播路由到两台服务器上,至于后端服务器是tomcat还是jetty之类的,都无所谓,照葫芦画瓢就是了。 当然,有的机器性能好,或者负载低,可以承担高负荷访问量,可以通过权重(weight),提升访问频率。数值越高,被分配到的请求数越多。 server指令参数如下: ``` bash - weight ——权重,数值越大,分得的请求数就越多,默认值为1 。 - max_fails ——对访问失败的后端服务器尝试访问的次数。默认值为1 ,当设置为0 时将关闭检查。 - fail_timeout——失效超时时间,当多次访问失败后,对该节点暂停访问。 - down——标记服务器为永久离线状态,用于ip_hash指令。 - backup——仅当非backup服务器全部宕机或繁忙时启用。 例如,可以这样配置: 引用 upstream tomcat { server 10.11 .155 .26 :8080 weight=5 ; server 10.11 .155 .41 :8080 weight=10 ; }
后者分得的请求数就会较高。
详细点的负载均衡配置nginx.conf:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 user www; worker_processes 1 ; error_log /opt/logs/nginx/error.log crit; pid /var /run/nginx.pid; worker_rlimit_nofile 1024 ; events { use epoll ; worker_connections 65535 ; } http { include /etc/nginx/mime.types; default_type application/octet-stream; server_names_hash_bucket_size 128 ; client_header_buffer_size 32 k; large_client_header_buffers 4 32 k; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65 ; log_format access '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"' ; access_log /var /log/nginx/access.log; upstream tomcat-account { server 192.168 .8 .1 x:3128 weight=5 ; server 192.168 .8 .2 x:80 weight=1 ; server 192.168 .8 .3 x:80 weight=6 ; } upstream mysvr2 { server 192.168 .8 .x:80 weight=1 ; server 192.168 .8 .x:80 weight=6 ; } server { listen 80 ; server_name 192.168 .8 .x; location ~ .*.aspx$ { root /root; index index.php index.html index.htm; proxy_pass http: proxy_redirect off; proxy_set_header Host $host ; proxy_set_header X-Real-IP $remote_addr ; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ; client_max_body_size 10 m; client_body_buffer_size 128 k; proxy_connect_timeout 90 ; proxy_read_timeout 90 ; proxy_buffer_size 4 k; proxy_buffers 4 32 k; proxy_busy_buffers_size 64 k; proxy_temp_file_write_size 64 k; } } }
常用指令说明
nginx在运行时与具体业务功能(比如http服务或者email服务代理)无关的一些参数,比如工作进程数,运行的身份等。
woker_processes 2 在配置文件的顶级main部分,worker角色的工作进程的个数,master进程是接收并分配请求给worker处理。这个数值简单一点可以设置为cpu的核数grep ^processor /proc/cpuinfo | wc -l,也是 auto 值,如果开启了ssl和gzip更应该设置成与逻辑CPU数量一样甚至为2倍,可以减少I/O操作。如果nginx服务器还有其它服务,可以考虑适当减少。
worker_cpu_affinity 也是写在main部分。在高并发情况下,通过设置cpu粘性来降低由于多CPU核切换造成的寄存器等现场重建带来的性能损耗。如worker_cpu_affinity 0001 0010 0100 1000; (四核)。
worker_connections 2048 写在events部分。每一个worker进程能并发处理(发起)的最大连接数(包含与客户端或后端被代理服务器间等所有连接数)。nginx作为反向代理服务器,计算公式 最大连接数 = worker_processes * worker_connections/4,所以这里客户端最大连接数是1024,这个可以增到到8192都没关系,看情况而定,但不能超过后面的worker_rlimit_nofile。当nginx作为http服务器时,计算公式里面是除以2。
worker_rlimit_nofile 10240 写在main部分。默认是没有设置,可以限制为操作系统最大的限制65535。
use epoll 写在events部分。在Linux操作系统下,nginx默认使用epoll事件模型,得益于此,nginx在Linux操作系统下效率相当高。同时Nginx在OpenBSD或FreeBSD操作系统上采用类似于epoll的高效事件模型kqueue。在操作系统不支持这些高效模型时才使用select。
2.2.2 http服务器
与提供http服务相关的一些配置参数。例如:是否使用keepalive啊,是否使用gzip进行压缩等。
sendfile on 开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,减少用户空间到内核空间的上下文切换。对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。
keepalive_timeout 65 : 长连接超时时间,单位是秒,这个参数很敏感,涉及浏览器的种类、后端服务器的超时设置、操作系统的设置,可以另外起一片文章了。长连接请求大量小文件的时候,可以减少重建连接的开销,但假如有大文件上传,65s内没上传完成会导致失败。如果设置时间过长,用户又多,长时间保持连接会占用大量资源。
send_timeout : 用于指定响应客户端的超时时间。这个超时仅限于两个连接活动之间的时间,如果超过这个时间,客户端没有任何活动,Nginx将会关闭连接。
client_max_body_size 10m 允许客户端请求的最大单文件字节数。如果有上传较大文件,请设置它的限制值
client_body_buffer_size 128k 缓冲区代理缓冲用户端请求的最大字节数 模块http_proxy: 这个模块实现的是nginx作为反向代理服务器的功能,包括缓存功能(另见文章)
proxy_connect_timeout 60 nginx跟后端服务器连接超时时间(代理连接超时) proxy_read_timeout 60 连接成功后,与后端服务器两个成功的响应操作之间超时时间(代理接收超时)
proxy_buffer_size 4k 设置代理服务器(nginx)从后端realserver读取并保存用户头信息的缓冲区大小,默认与proxy_buffers大小相同,其实可以将这个指令值设的小一点
proxy_buffers 4 32k proxy_buffers缓冲区,nginx针对单个连接缓存来自后端realserver的响应,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k 高负荷下缓冲大小(proxy_buffers*2)
proxy_max_temp_file_size 当 proxy_buffers 放不下后端服务器的响应内容时,会将一部分保存到硬盘的临时文件中,这个值用来设置最大临时文件大小,默认1024M,它与 proxy_cache 没有关系。大于这个值,将从upstream服务器传回。设置为0禁用。
proxy_temp_file_write_size 64k 当缓存被代理的服务器响应到临时文件时,这个选项限制每次写临时文件的大小。proxy_temp_path(可以在编译的时候)指定写到哪那个目录。
proxy_pass,proxy_redirect见 location 部分。
模块http_gzip:
gzip on : 开启gzip压缩输出,减少网络传输。 gzip_min_length 1k : 设置允许压缩的页面最小字节数,页面字节数从header头得content-length中进行获取。默认值是20。建议设置成大于1k的字节数,小于1k可能会越压越大。 gzip_buffers 4 16k : 设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。4 16k代表以16k为单位,安装原始数据大小以16k为单位的4倍申请内存。 gzip_http_version 1.0 : 用于识别 http 协议的版本,早期的浏览器不支持 Gzip 压缩,用户就会看到乱码,所以为了支持前期版本加上了这个选项,如果你用了 Nginx 的反向代理并期望也启用 Gzip 压缩的话,由于末端通信是 http/1.0,故请设置为 1.0。 gzip_comp_level 6 : gzip压缩比,1压缩比最小处理速度最快,9压缩比最大但处理速度最慢(传输快但比较消耗cpu) gzip_types :匹配mime类型进行压缩,无论是否指定,”text/html”类型总是会被压缩的。 gzip_proxied any : Nginx作为反向代理的时候启用,决定开启或者关闭后端服务器返回的结果是否压缩,匹配的前提是后端服务器必须要返回包含”Via”的 header头。 gzip_vary on : 和http头有关系,会在响应头加个 Vary: Accept-Encoding ,可以让前端的缓存服务器缓存经过gzip压缩的页面,例如,用Squid缓存经过Nginx压缩的数据。。 2.2.3 server虚拟主机
http服务上支持若干虚拟主机。每个虚拟主机一个对应的server配置项,配置项里面包含该虚拟主机相关的配置。在提供mail服务的代理时,也可以建立若干server。每个server通过监听地址或端口来区分。
listen 监听端口,默认80,小于1024的要以root启动。可以为listen *:80、listen 127.0.0.1:80等形式。
server_name 服务器名,如localhost、www.example.com,可以通过正则匹配。
模块http_stream 这个模块通过一个简单的调度算法来实现客户端IP到后端服务器的负载均衡,upstream后接负载均衡器的名字,后端realserver以 host:port options; 方式组织在 {} 中。如果后端被代理的只有一台,也可以直接写在 proxy_pass 。
2.2.4 location
http服务中,某些特定的URL对应的一系列配置项。
root /var/www/html 定义服务器的默认网站根目录位置。如果locationURL匹配的是子目录或文件,root没什么作用,一般放在server指令里面或/下。
index index.jsp index.html index.htm 定义路径下默认访问的文件名,一般跟着root放
proxy_pass http:/backend 请求转向backend定义的服务器列表,即反向代理,对应upstream负载均衡器。也可以proxy_pass http://ip:port。
proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 这四个暂且这样设,如果深究的话,每一个都涉及到很复杂的内容,也将通过另一篇文章来解读。
访问控制 allow/deny Nginx 的访问控制模块默认就会安装,而且写法也非常简单,可以分别有多个allow,deny,允许或禁止某个ip或ip段访问,依次满足任何一个规则就停止往下匹配。如:
1 2 3 4 5 6 7 8 9 10 location /nginx-status { stub_status on; access_log off; allow 192.168 .1 .100 ; allow 172.29 .73 .0 /24 ; deny all; }
我们也常用 httpd-devel 工具的 htpasswd 来为访问的路径设置登录密码:
1 2 3 4 5 6 7 8 New passwd:Re-type new password: Adding password for user admin 这样就生成了默认使用CRYPT加密的密码文件。打开上面nginx-status的两行注释,重启nginx生效。