您现在的位置是:技术博客 > 服务器服务器 nginx常见配置及优化 Lucas2020-06-04 07:33【代码】864人已围观 简介nginx是常用的web服务器,这里整理一些常见配置及优化方案,方便工作中使用。 下面是一些常见的nignx配置是工作中可能经常用得到的,详细的配置及优化参考 [nginx官方文档](href=https://www.nginx.cn/doc/;)。 常用命令如下 ``` // 重载 nginx -s reload // 重启 nginx -s reopen // 停止(快速关闭) nginx -s stop // 退出(在关闭前完成为打开的连接提供服务) nginx -s quit // 测试配置是否有语法错误 nginx -t ``` #### 一、nginx反向代理 ``` # ^~ 是将匹配规则定义成全匹配,相当于提高匹配权限,防止被 location ~ .*\.(jpg|jpeg|gif|png|js|css)$ 这种匹配拦截。 location ^~ /upload/{ #将访问/upload地址指向服务器的/local/file/目录,例如:可以将多个项目的某些公用的文件放在一个位置,同时指向这个地址 alias /local/file/ ; } location ^~ /test{ #将访问/test地址指向服务器的/local/file/test 下的目录,例如:可以将多个项目的某些公用的文件放在一个位置,同时指向这个地址 root /local/file ; } 如果有重写配置,会造成地址代理报错,如下,将/upload/和/test/排除在重写规则外。 rewrite ^(?!/upload/)(?!/test/)(.*)$ /index.php?s=/$1 last; rewrite ^(?!upload|test)(.*)$ /index.php?s=/$1 last; 使用“-f” 和“!-f”运算符检查文件是否存在 使用“-d” 和“!-d”运算符检查目录是否存在 使用“-e” 和“!-e”运算符检查文件,目录或符号链接是否存在 使用“-x” 和“!-x”运算符检查是否为可执行文件 location /upload/{ #访问/upload下的文件如果无法找到,则在代理服务器下的/upload下寻找文件 if (!-e $request_filename){ proxy_pass http://10.xxx.xxx.9:8008; } } # 图片访问使用反向代理 location ~ \.(jpeg|jpg|png|gif)$ { # 把原来的替换成这种。 Proxy_pass http://xxx.xx.com; Proxy_set_header X-Forwarded-For $remote_addr; } ``` #### 二、nginx的常见https配置 ``` server { listen 443; server_name xxx.xxx.com; root /usr/xxx/xxx/xxx; ssl on; # 注意路径如果是相对路径记得相对当前配置文件 ssl_certificate cert/2383461_xxx.xxx.com.pem; ssl_certificate_key cert/2383461_xxx.xxx.com.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; # 设置最大上传大小为20M client_max_body_size 20m; include /etc/nginx/default.d/*.conf; location / { index index.html index.htm index.php; if (!-e $request_filename){ rewrite ^(.*)$ /index.php?s=/$1 last; break; } } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } ``` #### 三、nginx配置301重定向 ``` server { listen 80; server_name xxx.xxx.com; # 下面的事将80端口访问的xxx.xxx.com重定向到443端口的https://xxx.xxx.com,提示:$server_name可以换成固定的网址 return 301 https://$server_name$request_uri; } server { listen 80; listen [::]:80; # 提升权重 server_name ip weight=1000; return 301 https://www.mylucas.com.cn$request_uri; } ``` #### 四、nginx配置miss访问 ``` # 配置80端口的miss路由 server { # 服务器中80端口未绑定的域名默认访问该位置 listen 80 default_server; server_name _; return 404; } # 配置443端口的miss路由 server { # 服务器中443端口未绑定的域名默认访问该位置 listen 443 default_server; server_name _; # 需要配置证书路径 ssl_certificate xxx.pem; ssl_certificate_key xxx.pem; index index.html; root /www/server/nginx/html; } ``` #### 五、nginx配置跨域访问 ``` location ~ .*\.(eot|ttf|ttc|otf|eot|woff|woff2|svg)(.*) { # 允许https://xxx.xxx.com跨域访问以上资源 add_header Access-Control-Allow-Origin https://xxx.xxx.com; } ``` #### 六、nginx配置反YisonSpider爬虫访问 ``` # 禁止Yisou爬虫访问网站 if ($http_user_agent !~* "YisouSpider") { return 403; } ``` #### 七、nginx配置socket服务的反向代理 ``` # 用socket.xxx.com代理本地的8082服务 server { listen 80; listen 443 ssl http2; server_name socket.xxx.com; # 替换为您的域名 ssl_certificate /www/server/panel/vhost/cert/socket.xxx.com/fullchain.pem; ssl_certificate_key /www/server/panel/vhost/cert/socket.xxx.com/privkey.pem; ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; location / { proxy_pass http://127.0.0.1:8082; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header Host $host; } } ``` #### 八、nginx配置代理服务器组 ``` # 如果被代理服务器是一组服务器的话,可以使用upstream指令配置后端服务器组。例如: upstream proxy_svrs{ # 这里如果指定的协议,那么在server块中的proxy_pass指令就不需要指明协议。反之。 server http://192.168.1.1:8081/uri/; server http://192.168.1.2:8081/uri/; server http://192.168.1.3:8081/uri/; } server{ listen 80; # 客户端请求域名 server_name www.myweb.name; location / { # 使用服务器组名称 proxy_pass proxy_svrs } } ``` #### 九、nginx优化配置 ``` # 设置 nginx 的工作进程数量(默认值:1) # 最大为CPU的逻辑处理器数量,比如6核心12线程的CPU,最大设置就是12,如果是6核心6线程,则为6。 # 需要考虑系统资源分配,每多一个运行进程,内存占用都要多一份(比如一个进程为400M,两个就是400M*2=800M) worker_processes 1; # 设置 nginx 最大文件描述符打开限制 # 在 Linux 系统中,每建立一个连接都是打开一个文件描述符(作为反向代理或负载均衡连接数量会翻倍,因为内外各一个) # 所以文件的打开限制决定了 nginx 的最大连接数(应大于 worker_processes * worker_connections) # 此处配置需要参考系统的限制(ulimit -n),不能超过系统的最大限制 worker_rlimit_nofile 65535; events { # 此为 Linux 系统特为处理大批量文件描述符而作改进的 poll 事件模型 use epoll; # 设置每个工作进程可处理的最大连接数量 # 此设置将直接影响工作进程的内存固定占用,每个连接大概占用内存 0.4~0.5KB 左右 # 此值应小于 worker_connections / worker_processes worker_connections 65535; # 允许同时接受多个网络连接 multi_accept on; } http { # 配置文件类型映射,以及默认的 mime 类型 include mime.types; default_type application/octet-stream; # 设置请求头缓冲区大小,超过后会使用下面的配置大小 # client_header_buffer_size 1K # 设置更大的请求头缓冲区大小,如果请求头超出可能会返回 HTTP 414 # large_client_header_buffers 8K # 设置请求体缓冲区大小,大于此缓冲区大小的,将写入磁盘文件 # client_body_buffer_size 16K # 设置请求体最大大小(此项影响上传文件的最大大小) client_max_body_size 1000m; # 提供了一种减少拷贝次数,提升文件传输性能的方法。(静态文件由内核直接发送给 socket,而不是由进程读取到内存再发送) sendfile on; # 降低数据包发送频率,当数据包满时再发送,减少网络数据包数量,降低网络拥塞情况,仅在 sendfile on 时生效 tcp_nopush on; # 为 http 请求保持 tcp 连接,避免短时间内多次 http 请求反复三次握手来建立 tcp 连接 # 配置保持连接的数量(默认值:100) keepalive_requests 100; # 配置保持连接的时长 keepalive_timeout 10; gzip on; # 开启 gzip,会增加对 cpu 的资源消耗 gzip_min_length 1k; # 低于 1kb 的资源不压缩 gzip_comp_level 2; # 压缩级别 1-9,越大压缩率越高,同时消耗 cpu 资源也越多。 # 需要压缩哪些响应类型的资源,多个空格隔开。有些格式的文件压缩效率较低,不建议压缩。 gzip_types text/plain application/json application/javascript application/x-javascript text/javascript text/xml text/css; gzip_disable "MSIE [1-6]\."; # 配置禁用 gzip 条件,支持正则。此处表示 ie6 及以下不启用 gzip(因为 ie 低版本不支持) gzip_vary on; # 配置添加 Vary 响应头 # 暂不知道用途,主要用来解决:could not build the proxy_headers_hash 错误 proxy_headers_hash_max_size 51200; proxy_headers_hash_bucket_size 6400; server { listen 80; listen [::]:80; # ipv6监听80 server_name demo.psy-cloud.com; location * { return 404; } } } ``` #### 十、nginx禁止某些文件访问 ``` # 禁止访问.ini,.conf.txt.md文件 location ~ \.(ini|conf|txt|md)$ { deny all; } #禁止访问目录 location ^~ /test/ { deny all; } #禁止访问目录下文件 location ^~ /test { deny all; } #Nginx可以通过以下配置禁止PHP脚本执行 location ~ ^/(uploads|assets)/.*\.(php|php5|jsp)$ { deny all; } #默认我们在请求txt/doc/pdf/ppt等类型的文件时会在浏览器进行渲染,为了安全,强烈建议当请求此类文件时进行下载而不是预览,我们可以按以下方法进行修改服务器配置来实现。 #Nginx可以修改配置文件(宝塔面板可直接在面板伪静态中添加) location ~ .*\.(txt|doc|pdf|rar|gz|zip|docx|exe|xlsx|ppt|pptx)$ { add_header Content-Disposition attachment; } ``` #### 十一、nginx解决安全扫描检测到目标URL存在http host头攻击漏洞 ``` # 增加以下两个配置,阻止非目标host访问 if ($host != "zxxx.xxxxx.net") { return 400; } if ($host !~* ^zxxx.xxxxx.net$) { return 444; } ``` 转载:感谢您对Lucas个人博客网站平台的认可,非常欢迎各位朋友分享到个人站长或者朋友圈,但转载请说明文章出处“来源Lucas个人博客”。 很赞哦! ( 1 ) 上一篇:Shell脚本处理文件目录 下一篇:Linux之cp命令 相关文章 定时任务 Curl无法发送https请求 Lnmp环境搭建 Windows的cmd指令 点击排行 生活不止眼前的苟且,还有诗和远方 十年一觉电影梦 奥地利基茨比厄尔 禅修治愈身心 自律成就自我 零边际成本社会 Modern PHP 鸟哥的Linux私房菜 本栏推荐 要技术,更要有创意 定时任务 Curl无法发送https请求 Lnmp环境搭建 常用的SQL函数 Windows的cmd指令 ueditor工具栏浮动bug 有趣的js插件 标签云 git laravel swoole javascript vue ajax html css sql linux docker flask django nginx apache thinkphp markdown sublime wechat layui photoshop nodejs mysql windows composer java maven springboot mybatis IDE 猜你喜欢 Swoole 基础篇一(初识) PHP进程管理器 正则的快速上手 Sublime代码格式化 Lnmp环境搭建 高并发库存防控超量 Linux之top命令 常用的SQL函数 站点信息 建站时间:2018-05-01 在线人数:1人 文章统计:263篇 总浏览量:222658次 统计数据:百度统计 个人信息:扫描二维码查看