Nginx 配置示例
文章目录
- Nginx主配置文件调优
- Nginx HTTP跳转HTTPS
- Nginx代理PHP服务
- Nginx作为代理服务器
- Nginx作为负载均衡服务器
- Nginx作为静态文件服务器
- Nginx反向代理WebSocket服务
- Nginx反向代理示例
- Nginx 子路由部署 Recat 项目
- Nginx 开启gzip压缩
- Nginx 跨域问题解决
- Nginx配置IP黑/白名单
- Nginx配置SSL证书
- Nginx配置动静分离
- Nginx 隐性跳转(浏览器保留旧URL)
Nginx主配置文件调优
# 启动用户改为 root,避免权限问题报错。
user root;
# 定义了 nginx 在为你的网站提供服务时,worker 进程的数量。工作进程一般设置为 CPU 的线程数,这里设置成 auto,nginx 会自动获取 CPU 线程数,并启用相对应的 worker 进程。
worker_processes auto;
# 配置 nginx worker 进程最大打开文件数
worker_rlimit_nofile 65535;
# nginx 的错误日志路径,warn 表示只打印打印 warn 级别以上的日志。
error_log /var/log/nginx/error.log warn;
# nginx 的 pid 文件路径
pid /var/run/nginx.pid;# 并发优化
events {# 设置了一个 worker 进程可以同时打开的链接数。如:现有4个 worker 进程,则当前 nginx 服务器的同时打开链接数为 4*1024=4096 个。需根据当前服务器的 open files 值设定,使用 ulimit -a 查看当前服务器的 open files 值。worker_connections 65535;# 让nginx收到一个新连接通知后接受尽可能多的连接。multi_accept on;
}http {include /etc/nginx/mime.types;default_type application/octet-stream;# 定义一个 main 的日志格式log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';# http 服务的访问日志路径,日志格式为 main 定义的格式access_log /var/log/nginx/access.log main;# 指向 sendfile()函数。sendfile() 在磁盘和 TCP 端口(或者任意两个文件描述符)之间复制数据。sendfile on;# 配置 nginx 在一个包中发送全部的头文件,而不是一个一个发送。tcp_nopush on;# 配置 nginx 不要缓存数据,应该快速的发送小数据(这仅仅应该用于频繁发送小的碎片信息而无需立刻获取响应的,需要实时传递数据的应用中)。tcp_nodelay on;# 指定了与客户端的 keep-alive 链接的超时时间。服务器会在这个时间后关闭链接。我们可以降低这个值,以避免让 worker 过长时间的忙碌。keepalive_timeout 60s;# 限制客户端文件上传下载大小限制,默认1mclient_max_body_size 20m;# 读取请求头的超时时间client_header_timeout 60s;# 读取请求实体的超时时间client_body_timeout 60s;# 开启 gzip 压缩模块gzip on;# 设置用于压缩响应的缓冲区的数量和大小gzip_buffers 16 8k;# 设置 gzip 压缩级别,值在 1 到 9 之间(值越大,压缩级别越高)gzip_comp_level 6;# IE 浏览器不开启 gzip,IE6 以下会乱码gzip_disable 'MSIE [1-6].';# 设置压缩所需的最小 HTTP 版本gzip_http_version 1.0;# 设置将被压缩的返回值的最小长度gzip_min_length 1k;# 需要压缩的文件的格式gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png image/tiff image/x-ms-bmp;gzip_vary off;# 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;# 关闭页面中的 nginx 版本数字信息,提高安全性。server_tokens off;# nginx 的 http 块配置文件,可将块配置文件放入该目录。include /etc/nginx/conf.d/*.conf;server {listen 80;server_name www.ppxxxo.com;# http 跳转 httpsrewrite ^(.*) https://$server_name$1 permanent;}server {listen 443 ssl;server_name www.ppxxxo.com;ssl_certificate ssl/ppxxxo.com.pem;ssl_certificate_key ssl/ppxxxo.com.key;ssl_session_cache shared:SSL:1m;ssl_session_timeout 5m;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;access_log /var/log/nginx/www.ppxxxo.com_access.log main;error_log /var/log/nginx/www.ppxxxo.com_error.log warn;# 静态文件location / {root /usr/share/nginx/html;index index.html;}location /anan/ {alias /usr/share/nginx/html/anan/;index index.html;}# 动态请求location /base/ {proxy_redirect off;proxy_set_header Host spa.asxxxr.net;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $remote_addr;proxy_pass http://39.103.221.4:50006/;}# 缓存常见格式的图片location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|svg|webm)$ {# 单位参数:d 天 | H 小时 | M 分expires 1h;}}
}
Nginx HTTP跳转HTTPS
server {listen 80;server_name admin.alxxj.cn;rewrite ^(.*) https://$server_name$1 permanent;
}
Nginx代理PHP服务
server {listen 443 ssl;server_name admin.alxxj.cn;ssl_certificate /etc/nginx/conf.d/ssl/admin.alxxj.cn.pem;ssl_certificate_key /etc/nginx/conf.d/ssl/admin.alxxj.cn.key;ssl_session_cache shared:SSL:1m;ssl_session_timeout 5m;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;index index.html index.php;root /var/www/html/alice/admin/web;rewrite (\/\.svn|.git\/) /404/;if ($http_user_agent ~* yahoo|bingbot) {return 403;}if ($query_string ~* ".*(insert|select|delete|update|count|master|truncate|declare|'|%27|%22|%3C|%3E|;|%20and%20|%20or%20).*"){return 404;}location / {try_files $uri $uri/ /index.php$is_args$args;}location ~ .*\.(php|php5)?${fastcgi_pass 127.0.0.1:9000;fastcgi_param ENV 'prod';fastcgi_index index.php;include fastcgi.conf;}location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)${expires 30d;}location ~ .*\.(js|css)?${expires 1h;}#日志access_log off;
}
Nginx作为代理服务器
Nginx 是一个优秀的高性能代理服务器,可以通过不同的配置进行反向代理、正向代理。
正向代理
正向代理的代理对象是客户端。正向代理就是nginx服务器替客户端去访问目标服务器。
server{resolver 8.8.8.8;listen 80;location / {proxy_pass http://$http_host$request_uri;}
}
在客户端配置 http_proxy 环境变量,export http_proxy=http://你的正向代理服务器地址:代理端口,即可使用代理服务器上网。
通过这种方式访问网站,例如百度。百度那边只能看到nginx服务器的IP,而获取不到你的真实IP。
反向代理
客户端不需要了解nginx服务器后面的服务,直接访问nginx提供的地址。
server {listen 80;server_name nginx1.com;location / {proxy_set_header Host nginx1.com;proxy_redirect off;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $remote_addr;proxy_pass https://www.baidu.com/;}
}server {listen 80;server_name nginx2.com;location / {proxy_set_header Host nginx2.com;proxy_redirect off;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $remote_addr;proxy_pass https://www.sina.com.cn/;}
}
访问:http://nginx1.com/,出现百度的页面。
访问:http://nginx2.com/,出现新浪的页面。
Nginx作为负载均衡服务器
可以将 nginx 作为一个非常高效的 HTTP 负载均衡器,将流量分配到多个应用服务器上,并通过 nginx 提高 Web 应用的性能、可扩展性和可靠性。
nginx 可以通过添加一个 upstream,来实现 nginx 的负载均衡功能。
upstream myserver {server 192.168.1.201;server 192.168.1.202;}
server {listen 80;location / {proxy_pass http://myserver;}}
通过这样配置,可以通过访问 nginx 服务器的地址,实现轮询(默认)访问它反向代理的两个后端服务
参数 | 描述 |
---|---|
backup | 将服务器标记为备份服务器。当主服务器不可用时,将使用该服务器。 |
down | 将服务器标记为永久不可用 |
fail_timeout=time | 在指定次数的不成功尝试与服务器通信的时间范围内,应考虑服务器不可用 |
max_conns=number | 限制代理服务器的同时活动连接的最大数量。默认值为零,表示没有限制 |
max_fails=number | 设置与服务器通信失败的最大尝试次数 |
weight=number | 设置服务器的权重,默认情况下为1 |
可通过设置权重 weight 来达到性能好的服务器提供更多次的服务目的。如下:201这台服务器提供的访问量就是202服务器的2倍。
upstream myserver {server 192.168.1.201 weight=2;server 192.168.1.202 weight=1;}
server {listen 80;location / {proxy_pass http://myserver;}}
几种常见的策略:
- 轮询(默认),请求过来后,Nginx 随机分配流量到任一服务器
upstream backend {server 127.0.0.1:3000;server 127.0.0.1:3001;
}
- weight=number 设置服务器的权重,默认为1,权重大的会被优先分配
upstream backend {server 127.0.0.1:3000 weight=2;server 127.0.0.1:3001 weight=1;
}
- backup 标记为备份服务器。当主服务器不可用时,将传递与备份服务器的连接
upstream backend {server 127.0.0.1:3000 backup;server 127.0.0.1:3001;
}
- ip_hash 保持会话,保证同一客户端始终访问一台服务器
upstream backend {ip_hash; server 127.0.0.1:3000 backup;server 127.0.0.1:3001;
}
- least_conn 优先分配最少连接数的服务器,避免服务器超载请求过多
upstream backend {least_conn;server 127.0.0.1:3000;server 127.0.0.1:3001;
}
Nginx作为静态文件服务器
Nginx 服务器的一个主要任务是提供静态HTML页面、图像或文件访问。
根据请求的不同,文件将从不同的本地目录提供。
/http/www
包含HTML文件
/http/data1/images
包含图像
/http/data2/file
包含文件
目录树:
http/
├── data1
│ └── images
│ ├── 1.jpg
│ └── 2.jpg
├── data2
│ └── file
│ ├── 1.txt
│ └── 1.zip
└── www├── 50x.html└── index.html
配置文件:
server {listen 80;server_name 127.0.0.1;location / {root /http/www;index index.html index.htm;}location /data1/ {root /http;}location /data2/ {root /http;}error_page 500 502 503 504 /50x.html;location = /50x.html {root /http/www;}
}
可以访问一下链接查看效果:
HTML静态文件:http://192.168.1.200/
图像浏览:http://192.168.1.200/data1/images/1.jpg
文件下载:http://192.168.1.200/data2/file/1.zip
Nginx反向代理WebSocket服务
server {listen 443 ssl;server_name devskt.asxxxd.com;ssl_certificate 3986794_devskt.asxxxd.com.pem;ssl_certificate_key 3986794_devskt.asxxxd.com.key;ssl_session_cache shared:SSL:1m;ssl_session_timeout 5m;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;location / {proxy_pass http://172.26.155.95:31114;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";}
}
Nginx反向代理示例
# http重写方式 一
server {listen 80;server_name www.xxx.com;rewrite ^ https://$http_host$request_uri? permanent; # force redirect http to https}# http重写方式 二
server {listen 80 default_server;listen [::]:80 default_server;server_name spa.asxxxor.net;root /usr/share/nginx/html;if ($host = "spa.asdoctor.net") {rewrite ^/(.*)$ https://spa.asxxxor.net permanent;}if ($host = "http://spa.asdoctor.net") {rewrite ^/(.*)$ https://spa.asxxxor.net permanent;}if ($host = "https://spa.asdoctor.net") {rewrite ^/(.*)$ https://spa.asxxxor.net permanent;}location / {}error_page 404 /404.html;location = /40x.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}
}
# 代理https
server {listen 443 ssl;server_name spa.asxxxor.net;ssl_certificate /etc/letsencrypt/live/spa.asxxxor.net/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/spa.asxxxor.net/privkey.pem;ssl_session_cache shared:SSL:1m;ssl_session_timeout 5m;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;location / {proxy_set_header Host spa.asxxxor.net;proxy_redirect off;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $remote_addr;proxy_pass http://172.29.117.155:50099/;}
}
Nginx 子路由部署 Recat 项目
location ^~ /anan/ {# 项目地址alias /usr/local/nginx/html/anan/;# 解决刷新报 404try_files $uri $uri/ /anan/index.html;index index.html;access_log /home/log/nginx/access/www.anan.com.log main;error_log /home/log/nginx/www.anan.com.log warn;
}
Nginx 开启gzip压缩
gzip on; # 开启Gzip
gzip_min_length 1k; # 不压缩临界值,大于1K的才压缩,一般不用改
gzip_buffers 4 16k; # 设置用于处理请求压缩的缓冲区数量和大小。
gzip_http_version 1.0; # 用于识别http协议的版本,早期的浏览器不支持gzip压缩,用户会看到乱码,所以为了支持前期版本加了此选项。
gzip_comp_level 6; # 设置gzip压缩级别,级别越底压缩速度越快文件压缩比越小,反之速度越慢文件压缩比越大
# 设置需要压缩的MIME类型,如果不在设置类型范围内的请求不进行压缩
gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary on; # 增加响应头”Vary: Accept-Encoding”
Nginx 跨域问题解决
location / { add_header Access-Control-Allow-Origin *;add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';if ($request_method = 'OPTIONS') {return 204;}
}
Access-Control-Allow-Origin
服务器默认是不被允许跨域的。给Nginx服务器配置Access-Control-Allow-Origin *
后,表示服务器可以接受所有的请求源(Origin),即接受所有跨域的请求。
Access-Control-Allow-Headers
是为了防止出现以下错误:Request header field Content-Type is not allowed by Access-Control-Allow-Headers in preflight response.
这个错误表示当前请求Content-Type的值不被支持。其实是我们发起了"application/json"的类型请求导致的。这里涉及到一个概念:预检请求(preflight request),请看下面"预检请求"的介绍。
Access-Control-Allow-Methods
是为了防止出现以下错误:Content-Type is not allowed by Access-Control-Allow-Headers in preflight response.
给OPTIONS添加204的返回
是为了处理在发送POST请求时Nginx依然拒绝访问的错误,发送"预检请求"时,需要用到方法 OPTIONS ,所以服务器需要允许该方法。
Nginx配置IP黑/白名单
IP访问控制可以加在 nginx 的任意一个块中。如:http、 server、 location。例如我们直接将以下配置加在 http 块中,这样整个 nginx 的服务会受到影响。
deny 192.168.1.66;
allow 192.168.1.0/24;
allow 10.1.20.6/16;
allow 34.26.157.0/24;
deny all;
以上配置实现的效果:
允许 192.168.1.0 该网段,除 192.168.1.66 这个IP都可访问nginx。
允许 10.1.20.6/16 该网段的IP访问。
允许 34.26.157.0/24 该网段的IP访问。
除上面指定的IP范围,其他IP禁止访问。
Nginx配置SSL证书
要设置一个HTTPS服务器,在nginx.conf文件中,在服务器块的listen指令中加入ssl参数,然后指定服务器证书和私钥文件的位置。
server {listen 443 ssl;server_name api.pxxxo.com;ssl_certificate /etc/letsencrypt/live/api.pxxxo.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/api.pxxxo.com/privkey.pem;ssl_session_cache shared:SSL:1m;ssl_session_timeout 5m;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;location / {root /usr/share/nginx/html;index index.html index.htm;}error_page 500 502 503 504 /50x.html;location = /50x.html {root /usr/share/nginx/html;}
}
ssl_protocols 和 ssl_ciphers 指令可以用来要求客户端在建立连接时只使用SSL/TLS的强版本和密码。
会话存储在工作进程之间共享的SSL会话缓存中,并由ssl_session_cache指令配置。一兆字节的缓存包含大约4000个会话。缓存的默认超时时间是5分钟,这个超时时间可以使用ssl_session_cache指令增加。这个超时时间可以使用ssl_session_timeout指令来增加。
上面是一个为多核系统优化的配置示例,它有1兆字节的共享会话缓存。
Nginx配置动静分离
动静分离的原理:nginx 将客户端发来的请求分为动态请求(php,jsp,cgi)与静态请求(html,css,js和图片资源),转发给不同的服务器。有负责动态处理的tomcat服务器,也有只负责静态文件存储的服务器。
# 动态页面交给http://myserver
location ~ .*\.(php|jsp|cgi)?$
{proxy_pass http://tdt_wugk;
}
# 配置Nginx动静分离,定义的静态页面直接从Nginx发布目录读取。
location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$
{root /data/www/file;
# expires定义用户浏览器缓存的时间为3天,如果静态页面不常更新,可以设置更长,这样可以节省带宽和缓解服务器的压力
expires 3d;
}
Nginx 隐性跳转(浏览器保留旧URL)
将 https://sales.bxxxd.cn 隐式转发到 https://sales.oxxxd.com
server {listen 80;listen 443 ssl;server_name sales.bxxxd.cn;access_log /usr/local/nginx/logs/sales.bxxxd.cn-access.log main;error_log /usr/local/nginx/logs/sales.bxxxd.cn--error.log;ssl_certificate /usr/local/nginx/conf/SSL/scs1665543427707_sales.bxxxd.cn_server.crt;ssl_certificate_key /usr/local/nginx/conf/SSL/scs1665543427707_sales.bxxxd.cn_server.key;ssl_session_cache shared:SSL:1m;ssl_session_timeout 5m;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;location ~* / {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;proxy_pass https://sales.oxxxd.com;}
}
server {listen 443 ssl;server_name xt.pxxxo.com;ssl_certificate ssl/pxxxo.com.pem;ssl_certificate_key ssl/pxxxo.com.key;ssl_session_cache shared:SSL:1m;ssl_session_timeout 5m;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;access_log logs/access_xt.log main;error_log logs/error_xt.log error;location / {rewrite ^.+apis/?(.*)$ /$1 break;proxy_pass https://data.chxxxxc.org/;}
}
Nginx 配置示例相关推荐
- Nginx配置示例文件
Nginx配置示例文件 nginx.conf worker_processes 8;events {worker_connections 1024; }http {include mime.types ...
- nginx 配置示例_Nginx位置指令示例
nginx 配置示例 The location directive within NGINX server block allows to route request to correct locat ...
- Nginx配置单项SSL以及双向SSL
Https安全协议的由来? 在实现 HTTPS协议前,我们需要了解 SSL 协议,但其实我们现在使用的更多的是 TLS 加密通讯协议. 那么TLS是怎么保证明文消息被加密的呢?在OSI七层模型中,应用 ...
- Nginx 配置一个域名使用HTTPS 后其它域名访问HTTPS时也会跳转到该站点解决
nginx 同一个IP上配置多个HTTPS主机 Nginx 配置一个域名使用HTTPS 后其它域名访问HTTPS时也会跳转到该站点 对于https的域名在同一个IP上如何同时存在多个虚拟主机呢? 遂, ...
- Nginx跨域解决配置示例
简介 在日常学习和工作开发中,需要请求两个不同配置的请求经常存在,本文介绍如果还使用Nginx配置解决其跨域问题 相关理论 首先需要了解什么是跨域,下面的两个文章说的很好,请仔细阅读后,然后自己去动手 ...
- ssms没有弹出服务器验证_Nginx服务器负载均衡及生成ssl密钥对、Nginx配置ssl操作示例...
概述 当用户访问nginx定制好的域名时,nginx通过转发到几台真实的站点,通过upstream实现 [root@centos7 vhost]# vim /usr/local/nginx/conf/ ...
- Nginx配置详解与示例
Nginx配置详解 #定义Nginx运行的用户和用户组 user www www;#nginx进程数,建议设置为等于CPU总核心数. worker_processes 8;#全局错误日志定义类型,[ ...
- Nginx 配置清单(一篇够用)
欢迎关注方志朋的博客,回复"666"获面试宝典 Nginx 是一个高性能的 HTTP 和反向代理 web 服务器,同时也提供了 IMAP/POP3/SMTP 服务,其因丰富的功能集 ...
- 你应该知道的 Nginx 配置清单
Nginx 是一个高性能的 HTTP 和反向代理 web 服务器,同时也提供了 IMAP/POP3/SMTP 服务,其因丰富的功能集.稳定性.示例配置文件和低系统资源的消耗受到了开发者的欢迎. 本文, ...
最新文章
- 使用jquery-easyui写的CRUD插件(2)
- 最容易被忽视的学习材料--技术标准 (z)
- WordCount--统计输入文件的字符数、行数、单词数(java)--初级功能
- 电脑模拟器哪个好_电脑系统杀毒软件哪个好测评
- 程序员学历要求越来越高,薪酬天花板犹如发际线,原因很简单!
- IE浏览器9.0与王码五笔不兼容的问题
- macOS Python安装教程
- java 获取今天是星期几
- C语言—递归函数有5个人围坐在一起,问第5个人多大年纪,他说比第4个人大2岁;问第4个人,他说比第3个人大2岁;问第3个人,他说比第2个人大2岁;问第2个人,他说比第1个人大2岁。第1个人说自己10岁
- Java——继承的概念
- 如何把catia完全卸载干净_catia软件卸载不了怎么办
- 网络通信学习笔记之 ———Socket网络通信
- Chap.18 总结《CL: An Introduction》 (Vyvyan Evans)
- 用vmware安装雨林木风虚拟机系统的坑
- 【PyTorch深度学习项目实战100例】—— Python+OpenCV+MediaPipe手势识别系统 | 第2例
- JAVA基础语法_1
- 【计算机网络】第四部分 网络层(20) IP协议
- Python生成词云的制作
- SCU - 4437 Carries
- 固定资产管理系统提升企业固定资产管理效率
热门文章
- ginapi服务器性能,基于gin web框架搭建RESTful API服务
- iostextarea获取焦点_jquery – 在iOS上的Safari中针对textarea触发的不一致事件
- 数论 II(组合数学)
- 2023年某科技公司前端开发初级岗的面试笔试真题(含选择题答案、问答题解析、机试题源码)
- 十次方专属社交平台前端系统开发 网站前台-活动与招聘
- 3808: Neerc2012 Labyrinth of the Minotaur
- 发票扫一扫,OCR识别功能
- php 查看nts,nts | php教程|php源码|php学习
- java笔试题---用*打印漏斗形,信雅达笔试题
- 如何在cmd中,使用cd进入指定文件目录