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文件。