分布式实战(干货)
spring cloud 实战(干货)
mybatis 实战(干货)
spring boot 实战(干货)
React 入门实战(干货)
构建中小型互联网企业架构(干货)
python 学习持续更新
ElasticSearch 笔记
kafka storm 实战 (干货)
scala 学习持续更新
RPC
深度学习
GO 语言 持续更新
nginx 相关文章
cd /data/program/software
wget http://nginx.org/download/nginx-1.12.1.tar.gz
tar -zxvf nginx-1.12.1.tar.gz
cd /data/program/software/nginx-1.12.1
安装成功后有四个主要的目录如下:
/usr/local/nginx
cd /usr/local/nginx/sbin
常用命令:
启动:./nginx
停止:./nginx -s stop
重启:./nginx -s reopen
验证端口是否开启:
[root@dst6 ~]# ps -ef|grep nginx
root 5566 1 0 Nov06 ? 00:00:00 nginx: master process ./nginx 主进程,只有一个
nginx 5567 5566 0 Nov06 ? 00:00:00 nginx: worker process 工作进程,默认只有一个,可以通过修改nginx.conf中的worker_processes 1; 参数启动多个工作进程
nginx 5568 5566 0 Nov06 ? 00:00:00 nginx: worker process
nginx 5569 5566 0 Nov06 ? 00:00:00 nginx: worker process
nginx 5570 5566 0 Nov06 ? 00:00:00 nginx: worker process
root 10970 10950 0 01:10 pts/1 00:00:00 grep nginx
cd /usr/local/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 /var/run/nginx.pid;
# Load dynamic modules. See /usr/share/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"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /usr/local/nginx/conf/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 /usr/local/nginx/conf/conf.d/*.conf;
}
cd /usr/local/nginx/conf/conf.d
touch open-falcon.conf
加入如下配置:
server {
listen 80;
server_name 118.178.230.175;
access_log /var/log/nginx/openfalcon_access_log main;
client_max_body_size 60M;
client_body_buffer_size 512k;
location / {
proxy_pass http://localhost:8081;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
只能在events模块设置,用于防止在同一一个时刻只有一个请求的情况下,出现多个睡眠进程会被唤醒但只能有一个进程可获得请求的尴尬,如果不优化,在多进程的nginx会影响以部分性能。
events {
accept_mutex on; #优化同一时刻只有一个请求而避免多个睡眠进程被唤醒的设置,on为防止被同时唤醒,默认为off,因此nginx刚安装完以后要进行适当的优化。
}
只能在events模块设置,Nginx服务器的每个工作进程可以同时接受多个新的网络连接,但是需要在配置文件中配置,此指令默认为关闭,即默认为一个工作进程只能一次接受一个新的网络连接,打开后几个同时接受多个,配置语法如下:
events {
accept_mutex on;
multi_accept on; #打开同时接受多个新网络连接请求的功能。
}
当前使用的nginx可能会有未知的漏洞,如果被黑客使用将会造成无法估量的损失,但是我们可以将nginx的版本隐藏,如下:
server_tokens off; #在http 模块当中配置
events {
accept_mutex on;
multi_accept on;
use epoll; #使用epoll事件驱动,因为epoll的性能相比其他事件驱动要好很多
}
通过worker_connections number;进行设置,numebr为整数,number的值不能大于操作系统能打开的最大的文件句柄数,使用ulimit -n可以查看当前操作系统支持的最大文件句柄数,默认为为1024.
events {
worker_connections 102400; #设置单个工作进程最大连接数102400
accept_mutex on;
multi_accept on;
use epoll;
}
在浏览器当中可以显示的内容有HTML/GIF/XML/Flash等内容,浏览器为取得这些资源需要使用MIME Type,即MIME是网络资源的媒体类型,Nginx作为Web服务器必须要能够识别全部请求的资源类型,在nginx.conf文件中引用了一个第三方文件,使用include导入:
include mime.types;
default_type application/octet-stream;
访问日志是记录客户端即用户的具体请求内容信息,全局配置模块中的error_log是记录nginx服务器运行时的日志保存路径和记录日志的level,因此有着本质的区别,而且Nginx的错误日志一般只有一个,但是访问日志可以在不同server中定义多个,定义一个日志需要使用access_log指定日志的保存路径,使用log_format指定日志的格式,格式中定义要保存的具体日志内容:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
是由后端程序负责把源文件打包加密生成目标文件,然后程序读取目标文件返回给浏览器;这种做法有个致命的缺陷就是占用大量后端程序资源,如果遇到一些访客下载速度巨慢,就会造成大量资源被长期占用得不到释放(如后端程序占用的CPU/内存/进程等),很快后端程序就会因为没有资源可用而无法正常提供服务。通常表现就是 nginx报502错误,而sendfile打开后配合location可以实现有nginx检测文件使用存在,如果存在就有nginx直接提供静态文件的浏览服务,因此可以提升服务器性能. 可以配置在http、server或者location模块,配置如下:
sendfile on;
sendfile_max_chunk 512k; #Nginxg工作进程每次调用sendfile()传输的数据最大不能超出这个值,默认值为0表示无限制,可以设置在http/server/location模块中。
可以设置为linux系统最大打开的文件数量一致,在全局模块配置
worker_rlimit_nofile 65535;
用户和服务器建立连接后客户端分配keep-alive链接超时时间,服务器将在这个超时时间过后关闭链接,我们将它设置低些可以让ngnix持续工作的时间更长,1.8.1默认为65秒,一般不超过120秒。
keepalive_timeout 65 60; #后面的60为发送给客户端应答报文头部中显示的超时时间设置为60s:如不设置客户端将不显示超时时间。
Keep-Alive:timeout=60 #浏览器收到的服务器返回的报文
如果设置为0表示关闭会话保持功能,将如下显示:
Connection:close #浏览器收到的服务器返回的报文
使用命令listen,可以配置监听IP+端口,端口或监听unix socket:
listen 8090; #监听本机的IPV4和IPV6的8090端口,等于listen *:8000
listen 192.168.0.1:8090; #监听指定地址的8090端口
listen Unix:/www/file #监听unix socket