1.nginx 启动账户
以nginx用户身份启动,但是nginx作为系统账户,普通账户的身份启动。启动账户改为公司规定的指定账户。 [root@nginx ~]# useradd nginx -s /sbin/nologin -u 2000 user nginx;2.工作进程与CPU绑定,取消工作进程在多CPU之间来回切换导致的不必要的内存和CPU开销.
worker_processes 2;worker_cpu_affinity 0001 0010;3.调整nice值,以让nginx尽可能获得更多的运行时间
worker_priority 0;此值一般不会调整,生产环境一般一个服务器只运行一个服务器(LAP一般还是部署在同一服务器上)4.指定Nginx使用的事件模型 epoll
use epoll;5.允许一个工作进程同一时刻可以接受多个用户的链接请求
multi_accept on;6.修改单个工作进程的最大连接数,nginx总连接数为工作进程数量*单个工作进程最大连接数,在反向代理情况下 1/2。
worker_connections 65536;7.开启文件零拷贝
sendfile on; #此选项作为web服务一定开启(默认开启)注:对于零拷贝的文件一定是nginx服务器自身产生的,并不是从后端服务器(PHP或Java)发过来的(比如文件是从Java服务器发送过来的,此文件是不生效的),文件一定是nginx自身产生的(无论文件是放置于本地磁盘还是后端服务器共享),只要是nginx本身产生的文件就能实现零拷贝。8.是否启用响应报文合并及延迟发送,一般使用开启报文合并且不延迟发送数据。与sendfile连用
tcp_nopush on;tcp_nodelay off;9.是否开启文件压缩,一般开启。
gzip on; 可节省公司的出口带宽。10.设置会话保持时间,通常是60秒左右。
keepalive_timeout 65 65;11.隐藏nginx版本号
①server_tokens off;②再server_tokens off;想将nginx也修改。修改nginx源码,将server自定义。 nginx的源码文件中修改: [root@centos7-17 nginx-1.16.1]# vim src/http/ngx_http_header_filter_module.c ... static u_char ngx_http_server_string[] = "Server: myweb" CRLF; ... ==>此处我将server自定义为myweb 然后重新编译安装nginx即可。12.更改server_name和编码格式为utf-8、监听地址
server_name 域名;charset utf-8;listen 80;13.在定义访问日志格式和错误日志路径
一般使用定义json格式的日志,以便于日志收集和分析14.自定义错误界面显示
error_page 500 502 503 504 /50x.html; #定义错误页面error_page 404 /404.html;15.可能设计安全原因拒绝访问某些文件
定义某种后缀名称的文件拒绝所有人访问或者某目录location ~ /.ht {deny all;}16.实现动静分离
实现动静分离的方式: ①基于用户请求的URI或者后缀名实现动静分离 ②通常会使用UTI来实现将JAVA的请求转发至JAVA服务器处理(访问一个路径的话,往后端服务器转发) ③通常会使用后缀名实现PHP的转发 具体实现方式: ①Java程序:定义一个location,如果访问比如:http://www.rootzcp.com/app1/ 、 location /app1{..} 访问app1目录下的均代表Java程序,往后的服务器Tomcat转发。 ②PHP程序: 定义location ~* \.php${...} 以php结尾的文件为php程序,往后端php程序服务器转发 ③静态资源: location ~* \.(gif|jpg|jpeg|bmp|png|tiff|tif|ico|wmf|js)$ {.. } 以这些后缀结尾的为静态资源,在后端存储服务器去调用资源17.https的实现
全栈https或者登录和交易安全隐私时实现https server { server_name server-name; listen 443 ssl; ssl_certificate /path/to/file; ssl_certificate_key /path/to/file; ssl_session_cache shared:sslcache:20m; ssl_session_timeout 10m; } 基于虚拟主机头实现https(一个IP多域名https) nginx支持SNI(Server Name Indication)功能,因此能实现同一个IP多域名的https,注:Apache不支持此功能 ~]# nginx -V TLS SNI support enabled18.openssl版本升级
openssl的版本可能不能满足要求,https的实现时可能需要将openssl版本升级,可将openssl作为nginx的第三方模块升级 --with-openssl=DIR(openssl 源码包所在路径) 加上这个openssl较新版本的选项,重新编译安装nginx 查看openssl版本: nginx-1.16.1]# nginx -V .... built with OpenSSL 1.1.1d 10 Sep 2019 ....19.nginx rewrite
优化主要将http重定向为https # 全栈https # if ( $scheme = http ) { # rewrite / https://www.rootzcp.com permanent; # } # } 只要使用http 就将http重写为https 部分目录使用https: location /login { root /data/nginx/html/; index index.html; if ( $scheme = http ) { rewrite / https://www.rootzcp.com/ permanent; } auth_basic "Login Authentication"; auth_basic_user_file /data/nginx/html/login/.htpasswd; } 只要是访问http://www.rootzcp.com/login 此目录,重写为https20.防盗链 ①正常访问某个资源的方式:
none:请求报文首部没有referer首部,比如用户直接在浏览器输入域名访问web网站,就没有referer信息。blocked:请求报文有referer首部,但无有效值,比如为空。server_names:referer首部中包含本主机名及即nginx 监听的server_name。arbitrary_string:自定义指定字符串,但可使用*作通配符。regular expression:被指定的正则表达式模式匹配到的字符串,要使用开头,例如将这样的域名跳转过来的:.*.baidu.com。②防盗链的作用:
主要是为了节省带宽一般用于静态资源 location = /A.gif { root /data/nginx/pic; index index.html; valid_referers none blocked server_names *.rootzcp.com *.google. *.baidu.com; if ( $invalid_referer ) { return 403; } } ==>使用referers防止盗链,只放行指定的referers。21.错误资源重定向至首页(或者重定向至指定页面)
location / { root html; index index.html; if ( !-f $request_filename ){ rewrite (.*) http://www.rootzcp.com/index.html; } } ==>注:rewrite (.*) http://www.rootzcp.com/index.html;这个重定向一定具体到某个资源 rewrite (.*) http://www.rootzcp.com 如果这样写将造成来回重定向,报错。