Nginx配置文件
1、主配置文件
/etc/nginx/nginx.conf #Nginx主配置文件
1. [root@NFS ~]# cat /etc/nginx/nginx.conf 2. #这里是核心区块 3. user nginx; #虚拟用户,可以自定义 4. worker_processes auto; #work子进程的数量,cpu核心数有几个,这个地方就是几个,之前版本数量都是1 5. 6. error_log /var/log/nginx/error.log notice; #错误日志存放的路径 7. pid /var/run/nginx.pid; #运行后的PID号的路径,用于停止启动时候杀死进程 8. 9. #这里是事件模块 10. events { 11. worker_connections 1024; #每个进程最大的并发连接数,最高数量是65535,每个核心的并发数,等于总nginx的并发数,这个最大连接数量,还与文件描述符有关(打开文件最大数量) 12. } 13. 14. 15. http { 16. include /etc/nginx/mime.types; #支持的媒体类型 17. default_type application/octet-stream; #如果找不到对应的类型,默认下载的方式打开 18. 19. log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 20. '$status $body_bytes_sent "$http_referer" ' 21. '"$http_user_agent" "$http_x_forwarded_for"'; 22. 23. access_log /var/log/nginx/access.log main; #默认main格式 24. 25. sendfile on; #文件的高效传输 26. #tcp_nopush on; 27. 28. keepalive_timeout 65; #长链接超时时间,65秒没有新的请求 29. 30. #gzip on; #是否开启压缩 31. 32. include /etc/nginx/conf.d/*.conf; 意思是*.conf里的配置内容在http模块下面 33. } 34. [root@NFS ~]# 35. 36. #虽然*.conf的路径是在/etc/nginx/conf.d目录下,但是实际路径是/etc/nginx,也就是说直接把配置写进去或者引用是一个道理。 37. 38. 配置两种写法: 39. 1、cat /etc/nginx/conf.d/default.conf 40. 2、
/etc/nginx/conf.d/default.conf #默认网站配置文件
1. server{ 2. 3. listen 80; #监听的端口 IP地址 4. 5. server_name www.game.com; #域名 localhost表示本机 6. 7. location / { #用户访问域名默认返回的内容,因为访问默认 8. #www.game.com默认是有/,所以这里有根 9. 10. root /code; #指定用户去/code目录下找代码 11. 12. index index.html; #默认给用户返回index.html 或者index.htm 13. 14. } 15. 16. } 17. 18. 可以一个配置文件写多个配置内容,也可以多个配置文件写多个配置内容 19. 测试完配置文件是否正确:nginx -t 20. 可以vim +7 nginx.conf,直接跳转到第七行 21. 测试完后重启nginx生效:systemctl restart nginx 22. 配置代码目录:没有目录报404,有目录没有文件报403 23. 使用curl,默认会返回配置的文件内容,但是浏览器访问,默认是访问www.game.com/index.html
2、代理配置文件
3、编码相关配置文件
4、管理相关配置文件
5、日志相关配置文件
Nginx多业务实现方式
1、使用不同端口号表示不同的业务
1. [root@NFS 4]# vim /etc/nginx/conf.d/default.conf 2. server { 3. listen 80; 4. server_name www.game.com;#小霸王游戏 5. location /{ 6. root /code/1; 7. index index.html index.htm; 8. } 9. } 10. server { 11. listen 81; 12. server_name www.game.com;#植物大战僵尸 13. location /{ 14. root /code/2; 15. index index.html index.htm; 16. } 17. } 18. [root@NFS 4]# nginx -t 19. nginx: the configuration file /etc/nginx/nginx.conf syntax is ok 20. nginx: configuration file /etc/nginx/nginx.conf test is successful 21. [root@NFS 4]# systemctl restart nginx 22. [root@NFS 4]#
修改windows的本地hosts解析
windows浏览器分别访问www.game.com和www.game.com:81
2、使用不同的IP地址(多个网卡 不同的IP)
可以一个端口多个IP,解决端口不够用的问题
修改IP,写在listen前面,listen 10.0.0.88:80,
写在server_name那里,就算是域名匹配了,也能正常访问,但是不算IP地址匹配了。
3、可以使用不同的域名
1. [root@Web02 ~]# cat /etc/nginx/conf.d/server1.conf 2. server { 3. listen 80; 4. server_name test1.koten.com; 5. root /code/server1; 6. index index.html; 7. ... 8. } 9. [root@Web01 ~]# cat /etc/nginx/conf.d/server2.conf 10. server { 11. ... 12. listen 80; 13. server_name test2.koten.com; 14. root /code/server2; 15. index index.html; 16. }
Nginx日志管理
Nginx的日志记录模式非常灵活,每个级别的配置都有各自的独立的访问日志,日志格式通过log_format命令定义。
1、定义语法格式
1. # 配置语法: 包括: error.log access.log 2. Syntax: log_format name [escape=default|json] string ...; 3. Default: log_format combined "..."; 4. Context: http
2、Nginx默认日志语法
1. log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 2. '$status $body_bytes_sent "$http_referer" ' 3. '"$http_user_agent" "$http_x_forwarded_for"';
3、Nginx日志格式允许包含的内置变量
1. $remote_addr # 记录客户端IP地址 2. $remote_user # 记录客户端用户名 3. $time_local # 记录通用的本地时间 4. $time_iso8601 # 记录ISO8601标准格式下的本地时间 5. $request # 记录请求的方法以及请求的http协议 6. $status # 记录请求状态码(用于定位错误信息) 7. $body_bytes_sent # 发送给客户端的资源字节数,不包括响应头的大小 8. $bytes_sent # 发送给客户端的总字节数 9. $msec # 日志写入时间。单位为秒,精度是毫秒。 10. $http_referer # 记录从哪个页面链接访问过来的 11. $http_user_agent # 记录客户端浏览器相关信息 12. $http_x_forwarded_for #记录客户端IP地址 13. $request_length # 请求的长度(包括请求行, 请求头和请求正文)。 14. $request_time # 请求花费的时间,单位为秒,精度毫秒 15. # 注:如果Nginx位于负载均衡器,nginx反向代理之后, web服务器无法直接获取到客 户端真实的IP地址。 16. # $remote_addr获取的是反向代理的IP地址。 反向代理服务器在转发请求的http头信息中, 17. # 增加X-Forwarded-For信息,用来记录客户端IP地址和客户端请求的服务器地址。
4、access_log日志配置语法
1. Syntax: access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]]; 2. access_log off; 3. Default: access_log logs/access.log combined; 4. Context: http, server, location, if in location, limit_except
5、Nginx Access日志配置
1. server { 2. listen 80; 3. server_name code.koten.com; 4. 5. #将当前的server网站的访问日志记录至对应的目录,使用main格式 6. access_log /var/log/nginx/code.koten.com.log main; 7. location / { 8. root /code; 9. } 10. 11. #当有人请求改favicon.ico时,不记录日志 12. location /favicon.ico { 13. access_log off; 14. return 200; 15. } 16. }
6、Nginx日志切割
使用logrotate切割日志
1. [root@nginx conf.d]# cat /etc/logrotate.d/nginx 2. /var/log/nginx/*.log { 3. daily # 每天切割日志 4. missingok # 日志丢失忽略 5. rotate 52 # 日志保留52天 6. compress # 日志文件压缩 7. delaycompress # 延迟压缩日志 8. notifempty # 不切割空文件 9. create 640 nginx adm # 日志文件权限 10. sharedscripts 11. postrotate # 切割日志执行的命令 12. if [ -f /var/run/nginx.pid ]; then 13. kill -USR1 `cat /var/run/nginx.pid` 14. fi 15. endscript 16. }
日志切割后的效果
1. [root@Web01 ~]# ll /var/log/nginx/ 2. total 4044 3. -rw-r----- 1 www adm 54438 Oct 12 03:28 access.log-20181012.gz 4. -rw-r----- 1 www adm 28657 Oct 13 03:48 access.log-20181013.gz 5. -rw-r----- 1 www adm 10135 Oct 12 03:28 error.log-20181130.gz 6. -rw-r----- 1 www adm 7452 Oct 13 03:48 error.log-20181201.gz
goaccess日志监控
1. 第一步: 安装 2. 3. [root@web01 ~]# yum -y install goaccess 4. 5. 第二步: 配置 6. [root@web01 ~]# vim /etc/goaccess/goaccess.conf 7. time-format %H:%M:%S 8. date-format %d/%b/%Y 9. \# NCSA Combined Log Format 10. log-format %h %^[%d:%t %^] "%r" %s %b "%R" "%u" 11. 12. 13. 第三步: 通过命令行测试 14. [root@web01 ~]# goaccess -f /var/log/nginx/access.log 15. 16. 第四步: 希望把页面存储下来使用浏览器进行访问 17. vim go.koten.com 18. server { 19. listen 80; 20. server_name go.koten.com; 21. 22. location / { 23. root /code/log; 24. index index.html; 25. } 26. } 27. {root@web01 ~]# mkdir /code/log 28. [root@web01 ~]# nohup goaccess -f /var/log/nginx/access.log -o /code/log/index.html -p /etc/goaccess/goaccess.conf --real-time-html &
我是koten,10年运维经验,持续分享运维干货,感谢大家的阅读和关注!