基本的 HTTP 服务器功能

http 核心

  • ngx_http_core_module 核心模块
  1. http {
  2. # 文件扩展名与文件类型映射表
  3. include /etc/nginx/mime.types;
  4. # 最大上传
  5. client_max_body_size 20m;
  6. # 默认文件类型
  7. default_type application/octet-stream;
  8. # 日志格式
  9. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  10. '$status $body_bytes_sent "$http_referer" '
  11. '"$http_user_agent" "$http_x_forwarded_for"';
  12. # access log 记录了哪些用户,哪些页面以及用户浏览器、ip和其他的访问信息
  13. access_log logs/access.log main;
  14. # 服务器名字的hash表大小
  15. server_names_hash_bucket_size 128;
  16. # 客户端请求头缓冲大小. nginx默认会用client_header_buffer_size 这个 buffer 来读取 header 值
  17. # 如果header过大,它会使用large_client_header_buffers来读取.
  18. # 如果设置过小HTTP头/Cookie过大 会报400 错误 nginx 400 bad request
  19. # 如果超过buffer,就会报HTTP 414错误(URI Too Long)
  20. # nginx接受最长的HTTP头部大小必须比其中一个buffer大,否则就会报400的HTTP错误(Bad Request).
  21. client_header_buffer_size 32k;
  22. large_client_header_buffers 4 32k;
  23. # 客户端请求体的大小
  24. client_body_buffer_size 8m;
  25. # 隐藏 ngnix 版本号
  26. server_tokens off;
  27. # 忽略不合法的请求头
  28. ignore_invalid_headers on;
  29. # 指定启用除第一条error_page指令以外其他的error_page.
  30. recursive_error_pages on;
  31. # 让 nginx 在处理自己内部重定向时不默认使用 server_name 设置中的第一个域名
  32. server_name_in_redirect off;
  33. # 开启文件传输,一般应用都应设置为on;若是有下载的应用,则可以设置成off来平衡网络I/O和磁盘的I/O来降低系统负载
  34. sendfile on;
  35. # 告诉nginx在一个数据包里发送所有头文件,而不一个接一个的发送.
  36. tcp_nopush on;
  37. # 告诉nginx不要缓存数据,而是一段一段的发送--当需要及时发送数据时,就应该给应用设置这个属性,
  38. # 这样发送一小块数据信息时就不能立即得到返回值.
  39. tcp_nodelay on;
  40. # 长连接超时时间,单位是秒
  41. keepalive_timeout 3;
  42. # gzip模块设置,使用 gzip 压缩可以降低网站带宽消耗,同时提升访问速度.
  43. gzip on; # 开启gzip
  44. gzip_min_length 1k; # 最小压缩大小
  45. gzip_buffers 4 16k; # 压缩缓冲区
  46. gzip_http_version 1.0; # 压缩版本
  47. gzip_comp_level 2; # 压缩等级
  48. gzip_types text/plain application/x-javascript application/javascript text/css text/javascript application/x-httpd-php image/jpeg image/gif image/png; #压缩类型
  49. proxy_connect_timeout 15;
  50. proxy_send_timeout 20;
  51. proxy_read_timeout 20;
  52. proxy_buffer_size 256k;
  53. proxy_buffers 4 256k;
  54. proxy_busy_buffers_size 512k;
  55. proxy_temp_file_write_size 512k;
  56. # 导入配置
  57. include /etc/nginx/conf.d/http-*.conf;
  58. }

http 反向代理

  • ngx_http_proxy_module 模块
  1. location / {
  2. proxy_pass http://localhost:8000;
  3. proxy_set_header Host $host;
  4. proxy_set_header X-Real-IP $remote_addr;
  5. }

http 负载均衡

  • ngx_http_upstream_module 模块
  1. http {
  2. # 负载均衡配置
  3. ## upstream: 作负载均衡,在此配置需要轮询的服务器地址和端口号
  4. ## load_balance_name: 负载均衡内部名称
  5. ## server: 实际地址
  6. ## max_fails: 为允许请求失败的次数,默认为1.
  7. ## weight: 为轮询权重,根据不同的权重分配可以用来平衡服务器的访问率.
  8. upstream load_balance_name {
  9. server 192.168.2.149:8080 max_fails=0 weight=1;
  10. server 192.168.1.9:8080 max_fails=0 weight=1;
  11. }
  12. }
  13. # conf.d/http-*.conf 指定文件配置
  14. server {
  15. location / {
  16. # 此处配置的域名必须与 load_balance_name 的域名一致,才能转发.
  17. proxy_pass http://load_balance_name;
  18. proxy_set_header X-Real-IP $remote_addr;
  19. }
  20. }

其他 HTTP 服务器功能

1. server 虚拟机服务器 - 模板

  • ngx_http_core_module 模块
  1. server {
  2. # 监听端口
  3. listen 80;
  4. # 域名
  5. server_name hostname1 hostname2;
  6. #字符集
  7. charset utf-8;
  8. # 单独的 access_log 文件
  9. access_log logs/192.168.2.149.access.log main;
  10. # 反向代理配置,将所有请求为 http://hostname 的请求全部转发到 upstream 中定义的目标服务器中.
  11. location / {
  12. # 此处配置的域名必须与 upstream 的域名一致,才能转发.
  13. proxy_pass http://hostname;
  14. proxy_set_header X-Real-IP $remote_addr;
  15. }
  16. #启用nginx status 监听页面
  17. location /nginxstatus {
  18. stub_status on;
  19. access_log on;
  20. }
  21. #错误页面
  22. error_page 500 502 503 504 /50x.html;
  23. location = /50x.html {
  24. root html;
  25. }
  26. }

1.1 server 虚拟机服务器 - 代理

  1. # conf.d/http-*.conf
  2. server {
  3. listen 80;
  4. server_name dw.corp.angejia.com;
  5. location /monitor {
  6. proxy_pass http://bi1:9080;
  7. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  8. }
  9. #node js socket.io
  10. location /socket.io {
  11. proxy_pass http://bi3:8000;
  12. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  13. proxy_http_version 1.1;
  14. proxy_set_header Upgrade $http_upgrade;
  15. proxy_set_header Connection "Upgrade";
  16. }
  17. }

1.2 server 虚拟机服务器 - PHP 集成

  1. # php 可以直接用的demo
  2. server {
  3. listen 80;
  4. # 网站别名
  5. server_name demo.box.cn;
  6. #access_log /data/logs/nginx/test.ttlsa.com.access.log main;
  7. #默认文件
  8. index index.php index.html;
  9. #网站跟目录
  10. root /web/www/demo;
  11. location / {
  12. try_files $uri $uri/ /index.php?$args;
  13. }
  14. location ~ .*\.(php)?$ {
  15. expires -1s;
  16. try_files $uri =404;
  17. fastcgi_split_path_info ^(.+\.php)(/.+)$;
  18. include fastcgi_params;
  19. fastcgi_param PATH_INFO $fastcgi_path_info;
  20. fastcgi_index index.php;
  21. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  22. # 设置 php-fpm 的端口地址
  23. fastcgi_pass 127.0.0.1:9000;
  24. #fastcgi_pass unix:/usr/local/php5.5/var/run/php-fpm.pid;
  25. }
  26. }
  27. # php 直接使用的动态主机
  28. server {
  29. listen 80;
  30. #access_log /data/logs/nginx/test.ttlsa.com.access.log main;
  31. #默认文件
  32. index index.php index.html index.html
  33. #网站跟目录
  34. server_name ~^(?<app>.+)\.hadoop\.box\.com;
  35. root /web/www/$app;
  36. location / {
  37. try_files $uri $uri/ /index.php?$args;
  38. #try_files $uri $uri/ /public/index.php?$query_string;
  39. #try_files $uri $uri/ /index.php?s=$request_uri;
  40. }
  41. location ~ .*\.(php)?$ {
  42. expires -1s;
  43. try_files $uri =404;
  44. fastcgi_split_path_info ^(.+\.php)(/.+)$;
  45. include fastcgi_params;
  46. fastcgi_param PATH_INFO $fastcgi_path_info;
  47. fastcgi_index index.php;
  48. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  49. #fastcgi_param SCRIPT_FILENAME /home/hadoop/app/uba/scripts/service/uba.ph
  50. fastcgi_pass 127.0.0.1:9000;
  51. #fastcgi_pass unix:/usr/local/php5.5/var/run/php-fpm.pid;
  52. #fastcgi_pass unix:/var/run/php5-fpm.sock
  53. }
  54. }

三. 邮件代理功能

* 核心模块

  • ngx_mail_core_module 模块
  1. ##### Mail 代理配置 Start #####
  2. mail {
  3. include /etc/nginx/conf.d/mail-*.conf;
  4. }
  5. ##### Mail 代理配置 End #####