代理服务器
Nginx 安装
一句命令安装nginx
yum install -y nginx
启动
systemctl start nginx.service
设置nginx
开机自启动
systemctl enable nginx.service
关闭
systemctl stop nginx.service
重启
systemctl restart nginx.service
网站文件存放默认位置(Welcome to nginx 页面)
/usr/share/nginx/html
网站默认站点配置
/etc/nginx/conf.d/default.conf
自定义配置文件存放目录
/etc/nginx/conf.d/
全局配置文件
/etc/nginx/nginx.conf
config
详解
#user nobody;
worker_processes 1; #工作进程数,一般和CPU核心数一致
#日志位置和日志级别[debug | info | notice | warn | error | crit]
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#进程文件
#pid logs/nginx.pid;
events {
worker_connections 1024; #==最大连接数,一般设置为cpu*1048
}
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
#动态加载模块化的http配置
include /usr/share/nginx/modules/*.conf;
#设定http服务器
http {
#文件扩展名与文件类型映射表
include mime.types;
#默认文件类型
default_type application/octet-stream;
#设定读取大型客户端请求头的缓冲区的最大数量和大小
large_client_header_buffers 4 64k;
#请求头分配一个缓冲区。如果请求头大小大于指定的缓冲区,则使用large_client_header_buffers指令分配更大的缓冲区。
client_header_buffer_size 32k;
#设置NGINX能处理的最大请求主体大小。 如果请求大于指定的大小,则NGINX发回HTTP 413(Request Entity too large)错误。
client_max_body_size 8m;
#日志,有问题记得看日志
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 logs/access.log main;
error_log logs/error.log;
#开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。
sendfile on;
#开启目录列表访问,合适下载服务器,默认关闭。
autoindex on;
#防止网络阻塞
#tcp_nopush 配置和 tcp_nodelay "互斥",tcp_nopush 必须和 sendfile 搭配使用
tcp_nopush on;
#tcp_nodelay off,会增加通信的延时,但是会提高带宽利用率。高延时、数据量大的通信场景中会有不错效果
#tcp_nodelay on,会增加小包的数量,但是可以提高响应速度。及时性高的通信场景中会有不错的效果
#tcp_nodelay on;
#客户端链接超时时间
#keepalive_timeout 0;
keepalive_timeout 65;
#FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度。下面参数看字面意思都能理解。
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
#开启gzip压缩输出
gzip on;
#最小压缩文件大小
gzip_min_length 1k;
#压缩缓冲区
gzip_buffers 4 16k;
#压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
gzip_http_version 1.0;
#压缩等级
gzip_comp_level 2;
#压缩类型,默认就已经包含textml,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。
gzip_types text/plain application/x-javascript text/css application/xml;
#用与设置Gzip功能是否发送带有“Vary:Accept-Encoding”头域的响应头部
gzip_vary on;
#limit_zone crawler $binary_remote_addr 10m; #开启限制IP连接数的时候需要使用
# 负载均衡,待选服务器列表
upstream myUpstream{
# 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
ip_hash;
# 按后端服务器的响应时间来分配请求,响应时间短的优先分配。
# fair;
# weight 表示权重,weight越大,负载的权重就越大。
# fail_timeout 失败后,暂停的时间
# max_fails 允许请求失败的次数默认为1
# down 表示单前的server暂时不参与负载.
# backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
server 123.123.123.123 weight=3 fail_timeout:60s;
server 321.321.312.311 weight=7;
}
#当配置多个server节点时,默认server names的缓存区大小就不够了,需要手动设置大一点
server_names_hash_bucket_size 512;
#动态加载模块化的server配置
include /usr/share/nginx/conf.d/*.conf;
# server表示虚拟主机可以理解为一个站点,可以配置多个server节点搭建多个站点
# 每一个请求进来确定使用哪个server由server_name确定
# 当需要对同一端口监听多个域名时,使用如下配置,端口相同域名不同,server_name也可以使用正则进行配置
# 但要注意server过多需要手动扩大server_names_hash_bucket_size缓存区大小
server {
listen 80;
server_name localhost;
#编码格式,避免url参数乱码
#charset koi8-r;
#access_log logs/host.access.log main;
#location用来匹配同一域名下多个URI的访问规则
#比如动态资源如何跳转,静态资源如何跳转等
#location后面跟着的/代表匹配规则
location / {
#站点根目录,可以是相对路径,也可以使绝对路径
root http://myUpstream/usr/share/nginx/html;
try_files $uri $uri/ /index.html;
}
# redirect server error pages to the static page /50x.html
#error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;oot html;
}
location /media/ {
add_header Content-Encoding gzip;
root /download/; # 媒体文件位置
}
location /socket.io/ {
proxy_pass http://myUpstream:5000/socket.io/;
#拒绝请求,返回403,一般用于某些目录禁止访问
#deny all;
#允许请求
#allow all;
proxy_buffering off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Cookie $http_cookie;
access_log off;
}
}
#负载均衡
server {
#监听端口
listen 80;
#域名可以有多个,用空格隔开
server_name www.xxxx.com www.yyy.com;
location / {
proxy_pass http://myproject;
}
}
# HTTP自动转发HTTPS
server {
listen 80;
server_name www.域名.com;
rewrite ^(.*) https://$server_name$1 permanent;
}
# 带SSL的配置
server {
listen 443;
server_name www.域名.com;
#编码格式,避免url参数乱码
#charset koi8-r;
root /projects/www;
ssl on;
# ssl证书地址
ssl_certificate /etc/nginx/certs/server.crt;
ssl_certificate_key /etc/nginx/certs/server.key;
#加密算法
ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
# 安全链接可选的加密协议
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 SSLv2 SSLv3;
# 使用服务器端的首选算法
ssl_prefer_server_ciphers on;
# 设置存储session参数的缓存的类型和大小 较多的配置是built-in和shared同时使用
# https://www.ioperat.com/news/operation/43.html推荐看这个,属于优化项
ssl_session_cache builtin:1000 shared:SSL:10m;
#缓存有效期
ssl_session_timeout 5m;
location / {
#依次查找对应uri地址资源 一般用于解决vue的history model
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
#访问域名指向这个ip的端口web服务(反向代理)
location /api/ {
proxy_pass http://localhost:8080; #如果安装在别的服务器, 请填写它的ip
proxy_buffering off;
proxy_http_version 1.1;# HTTP 协议的版本
# 设置一些代理的请求头,方便辨识
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#端口
proxy_set_header Host $host;
proxy_set_header X-Real-Port $server_port;
proxy_set_header X-Real-Scheme $scheme;
}
}
}
nginx -s quit 优雅停止nginx,有连接时会等连接请求完成再杀死worker进程
nginx -s reload 优雅重启,并重新载入配置文件nginx.conf
nginx -s reopen 重新打开日志文件,一般用于切割日志
nginx -v 查看版本
nginx -t 检查nginx的配置文件
nginx -h 查看帮助信息
nginx -V 详细版本信息,包括编译参数
nginx -c filename 指定配置文件