【服务器】Nginx安装以及配置详解(包括SSL,Proxy代理)

代理服务器

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 指定配置文件

你可能感兴趣的:(【服务器】Nginx安装以及配置详解(包括SSL,Proxy代理))