Nginx 的常用命令和配置文件
nginx 的安装
进入 nginx 官网,下载
第一步,安装 nginx依赖包
yum -y install zlib zlib-devel openssl openssl--devel pcre pcre-devel
第二步,安装 nginx
1、解压缩 nginx-xx.tar.gz 包。
2、进入解压缩目录,执行./configure。
3、make && make install
第三步,开放nginx的80端口
查看开放的端口号
1 | firewall-cmd --list-all |
设置开放的端口号
1 | firewall-cmd --add-service=http –permanent |
2 | firewall-cmd --add-port=80/tcp --permanent |
重启防火墙
1 | firewall-cmd –reload |
备注:我这里直接关了防火墙
进入目录 /usr/local/nginx/sbin/nginx 启动服务 ./nginx
nginx 常用的命令
1、进入 nginx 目录中 cd /usr/local/nginx/sbin
2、查看 nginx 版本号
./nginx –v
3、启动命令
./nginx
4、关闭命令
./nginx -s stop
5、重新加载命令
./nginx -s reload
nginx.conf 配置文件
nginx 配置文件结构,主要包涵3个核心模块和若干个辅助模块组成。
(main)核心模块包涵:
主模块(user、worker_processes、pid、error_log ......)
事件模块(accept_mutex、multi_accept、use、worker_connections ......)
HTTP核心模块(upstream、server、location、SSL、HttpGzip ......)
####nginx.conf详解如下,每个指令必须有分号结束。####
user nginx; #配置用户或者组,默认为nobody nobody。
worker_processes auto; #允许生成的进程数,默认为1,auto 代表进程数由CPU个数决定。
pid /nginx/pid/nginx.pid; #指定nginx进程运行文件存放地址
error_log log/error.log debug; #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
events {
accept_mutex on; #设置网路连接序列化,防止惊群现象发生,默认为on
multi_accept on; #设置一个进程是否同时接受多个网络连接,默认为off
use epoll; #默认高效率处理,事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
worker_connections 1024; #最大连接数,默认为512
}
http {
include mime.types; #文件扩展名与文件类型映射表
default_type application/octet-stream; #默认文件类型,默认为text/plain
access_log off; #access log很耗费性能,所以默认都是关闭的,如果需要开启定位问题,从配置服务上改。
access_log log/access.log myFormat; #combined为日志格式的默认值
log_format myFormat '$remote_addr–$remote_user |[$time_local] |$request |$status |$body_bytes_sent |$http_referer |$http_user_agent |$http_x_forwarded_for'; #自定义日志格式
client_body_buffer_size 100m; #可以通过配置服务更改,限定客户端请求的缓冲区大小,超过限定值之后就只有写到硬盘上了,没必要过度提高这个值。
client_max_body_size 100m; #限定客户端请求的最大文件大小,默认为1M,超长请求会被http 413 entity too large错误拦截。
client_body_temp_path client_body;
proxy_http_version 1.1;
proxy_temp_path proxy_temp;
proxy_set_header Host $http_host;
proxy_set_header Connection "Keep-Alive";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #从某个版本开始应业务要求加上的,给X-Forwarded-For头字段添加上拓扑上一级的ip地址,可以让下游服务器判断消息的最初来源ip。
sendfile on; #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
sendfile_max_chunk 100k; #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
server_tokens off; #off表示隐去nginx的版本信息。
keepalive_timeout 30; #http keepalive连接的超时时间,默认为75s,可通过配置服务变更,但通常来说都是客户端在数据传完几秒后就断开连接了。
gzip on; #gzip用于设置开启或者关闭gzip模块,“gzip on”表示开启GZIP压缩,实时压缩输出数据流。
gzip_min_length 1k; #gzip_min_length设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取。默认值是0,不管页面多大都进行压缩。建议设置成大于1K的字节数,小于1K可能会越压越大。
gzip_buffers 4 16k; #gzip_buffers表示申请4个单位为16K的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果。
gzip_http_version 1.1; #gzip_http_version用于设置识别HTTP协议版本,默认是1.1,目前大部分浏览器已经支持GZIP解压,使用默认即可。
gzip_comp_level 2; #gzip_comp_level用来指定GZIP压缩比,1 压缩比最小,处理速度最快;9 压缩比最大,传输速度快,但处理最慢,也比较消耗cpu资源。
gzip_types text/plain application/x-javascript text/css application/xml; #gzip_types用来指定压缩的类型,无论是否指定,“text/html”类型总是会被压缩的。
gzip_vary on; #gzip_vary选项可以让前端的缓存服务器缓存经过GZIP压缩的页面,例如用Squid缓存经过Nginx压缩的数据。
#默认负载策略就是轮询,
upstream varnish {
server 127.0.0.1:${varnish_port} fail_timeout=4;
server 127.0.0.1:${nginx_http_port} backup;
keepalive 512;
} #这是本机varnish的,一般情况下不要改动。
server {
listen 80
server_name ${DomainName}; #这个domainName来自于部署参数。
proxy_buffering off; #有了varnish就不用nginx来缓存消息了
include http_location.conf; #这个文件包含了所有路由包的http location配置
include custom_http_location.conf; #这个文件默认为空,可以添加一些特殊的http location,不受paas流程影响,但只能手工维护,如要添加,请一定备案!
return 301 https://$server_name$request_uri; #HTTP强制重定向至HTTPS
error_page 404 /404.html;
location = /404.html {
root html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}#上面两种html文件是我们提供的默认错误页,只有业务那边不提供错误页的时候才会使用,默认页里不含任何nginx的相关信息。
}
server {
listen 443 so_keepalive=on ssl;
server_name ${sslDomainName}; #这个domainName来自于部署参数,一定要和本机使用的ssl证书私钥匹配。
proxy_buffering off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
ssl_certificate BesCert.crt;
ssl_certificate_key server.key;
ssl_verify_client off;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
proxy_ssl_session_reuse on; #上面几项ssl配置没有特殊需要请勿修改
proxy_buffering off; #有了varnish就不用nginx来缓存消息了
include http_location.conf; #这个文件包含了所有路由包的http location配置
include custom_http_location.conf; #这个文件默认为空,可以添加一些特殊的http location,不受paas流程影响,但只能手工维护,如要添加,请一定备案!
location /BesCert.crt {
root conf/;
} #可以通过http://nginxIP:nginxPort/BesCert.crt来下载ssl证书
location ~* \.(css|svg|usl|uslx|wav|gif|jpg|jpeg|png|bmp|flv|js|swf|pdf|doc|ico|rtf)(\?.*)?$ {
proxy_pass http://varnish;
} #利用正则表达式过滤静态资源,分流给varnish处理,哪些文件属于静态资源由业务说了算
location = /node_status {
proxy_pass http://127.0.0.1:${varnish_port};
} #访问http://nginxIP:nginxPort/node_status来查看本节点的nginx和varnish是否正常服务,这个url地址也是提供给slb/radware来检查nginx健康度的。
location /nginx_status {
stub_status on;
allow ${nginx_ip};
deny all;
} #访问http://nginxIP:nginxPort/nginx_status来查看nginx的一些数据统计,这些数据也是kpi指标,仅限本机访问。
location /upstream_health {
check_status;
access_log off;
allow ${nginx_ip};
deny all;
} #访问http://nginxIP:nginxPort/upstream_health来查看nginx代理的所有upstream集群的健康状态,用浏览器呈现效果最好,但仅限本机访问。理论上可以增加更多allow xxx来扩展信任域,但一定要备案,免得泄露了敏感信息。
location ~*^.+$ { #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
#root path; #根目录
#index vv.txt; #设置默认页
proxy_pass http://mysvr; #请求转向mysvr 定义的服务器列表
deny 127.0.0.1; #拒绝的ip
allow 172.18.5.54; #允许的ip
}
error_page 404 /404.html;
location = /404.html {
root html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}#上面两种html文件是我们提供的默认错误页,只有业务那边不提供错误页的时候才会使用,默认页里不含任何nginx的相关信息。
}
}