vlambda博客
学习文章列表

Nginx学习心得 -- 服务器配置​(1)

        相信很多开发者都有过应用程序部署到生产环境的经历,在单一服务器的背景下,基本上都是基于tomcat、iis、apache等进行部署。然而当出现单一服务器性能不足以满足性能需求时,会考虑使用nginx进行负载均衡的配置。那么初次使用nginx时,从哪里着手去完成第一次配置呢?我百度了很多文章,发现绝大部分都是基于配置文件的属性去讲解,并且讲解得很详细,但这不是我想要的,作为初次使用者,我想知道的是如何去做一个demo的配置,以最直接的方式找到切入点,那么本文就带着初学者一起走Nginx学习之路。


(该图片引用自博文《NGINX 从入门到精通,学会这些就够了》

https://www.bianchengquan.com/article/609102.html)

        本文直接跳过安装过程,当我们完成安装之后,都先要搞明白的是配置文件在哪里?需要关注哪几个文件、哪几个文件夹?下面列举一部分:

主程序位置:/usr/sbin/nginx

主要文件夹:

                      /usr/share/nginx/html/   -- 默认的静态html存放位置,比如404.html、50x.html等

                      /etc/nginx/conf.d/          -- 自定义配置文件的目录

                      /etc/nginx/                      -- 配置文件的主目录

主要文件:

                    /etc/nginx/nginc.conf      -- 全局配置文件

                    /etc/nginx/conf.d/default.conf    -- 自定义配置默认配置文件(nginx安装完成后缺省状态是没有这个文件的,通常可以自己创建) 

        我们最需要关注的是两个文件,nginx.conf、default.conf,这两个文件也是网上各种文章里重要介绍的和使用的,通常nginx.conf会进行设置一些服务器配置,比如设置进程数量、日志目录、事件、服务器、开启gzip、负载均衡等等;而default.conf首先是继承nginx.conf文件中的配置,其次是针对server节点生效,也就是说将nginx.conf文件中的server节点除了保留默认值之外, 其他的server节点尽量放入default.conf文件进行实际的服务器配置更为恰当。

        那么为什么server节点可以单独放入default.conf文件呢?因为nginx.conf文件中有一句话将 /etc/nginx/conf.d/ 文件夹下面后缀名为.conf的文件全部引入,见下图红框标记的行:


        到此,实际举例,nginx.conf 文件中做一些全局性的配置:

# For more information on configuration, see:# * Official English Documentation: http://nginx.org/en/docs/# * Official Russian Documentation: http://nginx.org/ru/docs/
user nginx;worker_processes auto;error_log /var/log/nginx/error.log;pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.include /usr/share/nginx/modules/*.conf;
events { worker_connections 1024;}
http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
#gzip模块设置 gzip on; #开启gzip压缩输出 gzip_min_length 1k; #最小压缩文件大小 gzip_buffers 4 16k; #压缩缓冲区 gzip_http_version 1.1; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0) gzip_comp_level 2; #压缩等级 gzip_types text/plain application/x-javascript text/css application/xml; #压缩类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。 gzip_vary on;
access_log /var/log/nginx/access.log main;
sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 4096;
include /etc/nginx/mime.types; default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory. # See http://nginx.org/en/docs/ngx_core_module.html#include # for more information. include /etc/nginx/conf.d/*.conf;
server { listen 80; listen [::]:80; server_name _; root /usr/share/nginx/html;
# Load configuration files for the default server block. include /etc/nginx/default.d/*.conf;
error_page 404 /404.html; location = /404.html { }
error_page 500 502 503 504 /50x.html; location = /50x.html { } }
# Settings for a TLS enabled server.## server {# listen 443 ssl http2;# listen [::]:443 ssl http2;# server_name _;# root /usr/share/nginx/html;## ssl_certificate "/etc/pki/nginx/server.crt";# ssl_certificate_key "/etc/pki/nginx/private/server.key";# ssl_session_cache shared:SSL:1m;# ssl_session_timeout 10m;# ssl_ciphers HIGH:!aNULL:!MD5;# ssl_prefer_server_ciphers on;## # Load configuration files for the default server block.# include /etc/nginx/default.d/*.conf;## error_page 404 /404.html;# location = /40x.html {# }## error_page 500 502 503 504 /50x.html;# location = /50x.html {# }# }
}

而在/etc/nginx/conf.d/default.conf 文件中设置具体的虚拟主机的信息:

server { listen 80; server_name www.test.com weixin.test.com api.test.com;
#charset utf-8; #access_log /var/log/nginx/host.access.log main;

location / { root /home/work/v1.0.0.0; index index.html index.htm; }}

从上demo中可见,该配置是针对3个不同主机头同时做了设置,那么实际场景中很难会让不同的主机头进行相同的服务,肯定有对应的职责划分,就此我的建议是用主机头的方式来做隔离,这样更有利于server节点的配置, 比如:我们在/etc/nginx/conf.d/ 文件夹下面,增加www_test_com.conf文件、weixin_test_com.conf文件和api_test_com.conf文件。