发表于: 2017-09-23 20:25:58
2 808
【今日完成】
今天继续学习Nginx
发现Nginx的一切都是在配置文件(即conf里面完成的)
一个好的配置文件,可以完成所有Nginx该完成的功能。
这里有个Nginx的中文文档,把配置文件划分成了一个个的模块,对Nginx学习非常有帮助
囊括了所有的Nginx模块,其中比较重要的是Upstream模块,是用来做负载均衡的。
Upstream模块就是在一个大括号里配置server(即服务器集群),照理说每个服务器内容都该是一样的,因为输入同样的网站,访问到不同的内容,肯定是让人无法接受的怪事。
不过这里在学习,所以用了两个不一样的,一个是百度的IP,一个是IT修真院的IP。
把Upstream模块配好后,取一个名字:比如这里我取的smallclass(因为想讲Nginx的小课堂)
后面再调用proxy_pass中引用即可
总的来说还是很简单的
Upstream模块默认的调用服务器方式是轮询,就是轮着来调用。
但实际情况是,如果我们本次调用了服务器A,下次再调用服务器B,那么我们在服务器A存储的一些信息就会丢失。举个例子:比如登录密码的重复输入。
所以有了另一种调用方式,ip_hash。
启用ip_hash,这次调用了服务器A,那么下次会自动检测用户的IP,发现上次调用服务器A,这次依旧会把服务器A分给该用户。
启用ip_hash的方法也比较简单,在upstream中第一行写一句ip_hash 即可
通过今天的学习——发现Nginx就是鼓捣配置文件,其他并没有什么神秘的地方
下面贴一个Nginx官网的范例,大多数常用模块都在其中,可以当做今后配置文件的模板,
用到时只需复制,再修改几处细节即可复用。
#!nginx
: # 使用的用户和组
: user www www;
: # 指定工作衍生进程数
: worker_processes 2;
: # 指定 pid 存放的路径
: pid /var/run/nginx.pid;
: # [ debug | info | notice | warn | error | crit ]
: # 可以在下方直接使用 [ debug | info | notice | warn | error | crit ] 参数
: error_log /var/log/nginx.error_log info;
: events {
: # 允许的连接数
: connections 2000;
: # use [ kqueue | rtsig | epoll | /dev/poll | select | poll ] ;
: # 具体内容查看 http://wiki.codemongers.com/事件模型
: use kqueue;
: }
: http {
: include conf/mime.types;
: default_type application/octet-stream;
: log_format main '$remote_addr - $remote_user [$time_local] '
: '"$request" $status $bytes_sent '
: '"$http_referer" "$http_user_agent" '
: '"$gzip_ratio"';
: log_format download '$remote_addr - $remote_user [$time_local] '
: '"$request" $status $bytes_sent '
: '"$http_referer" "$http_user_agent" '
: '"$http_range" "$sent_http_content_range"';
: client_header_timeout 3m;
: client_body_timeout 3m;
: send_timeout 3m;
: client_header_buffer_size 1k;
: large_client_header_buffers 4 4k;
: gzip on;
: gzip_min_length 1100;
: gzip_buffers 4 8k;
: gzip_types text/plain;
: output_buffers 1 32k;
: postpone_output 1460;
: sendfile on;
: tcp_nopush on;
: tcp_nodelay on;
: send_lowat 12000;
: keepalive_timeout 75 20;
: #lingering_time 30;
: #lingering_timeout 10;
: #reset_timedout_connection on;
: server {
: listen one.example.com;
: server_name one.example.com www.one.example.com;
: access_log /var/log/nginx.access_log main;
: location / {
: proxy_pass http://127.0.0.1/;
: 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 10m;
: client_body_buffer_size 128k;
: client_body_temp_path /var/nginx/client_body_temp;
: proxy_connect_timeout 90;
: proxy_send_timeout 90;
: proxy_read_timeout 90;
:proxy_send_lowat 12000;
: proxy_buffer_size 4k;
: proxy_buffers 4 32k;
: proxy_busy_buffers_size 64k;
: proxy_temp_file_write_size 64k;
: proxy_temp_path /var/nginx/proxy_temp;
: charset koi8-r;
: }
: error_page 404 /404.html;
: location /404.html {
: root /spool/www;
: charset on;
: source_charset koi8-r;
: }
: location /old_stuff/ {
: rewrite ^/old_stuff/(.*)$ /new_stuff/$1 permanent;
: }
: location /download/ {
: valid_referers none blocked server_names *.example.com;
: if ($invalid_referer) {
: #rewrite ^/ http://www.example.com/;
: return 403;
: }
: #rewrite_log on;
: # rewrite /download/*/mp3/*.any_ext to /download/*/mp3/*.mp3
: rewrite ^/(download/.*)/mp3/(.*)\..*$
: /$1/mp3/$2.mp3 break;
: root /spool/www;
: #autoindex on;
: access_log /var/log/nginx-download.access_log download;
: }
: location ~* ^.+\.(jpg|jpeg|gif)$ {
: root /spool/www;
: access_log off;
: expires 30d;
: }
: }
: }
【今日完成】
把Nginx基本看完了,准备小课堂
【明日计划】
讲小课堂
评论