- 推荐 laravel-社区Nginx 常用配置,这个讲解很详细
-
(实用篇)nginx配置文件详解中文版
推荐nginx的配置、虚拟主机、负载均衡和反向代理 - 负载均衡的配置其实非常简单
vi /etc/nginx/site-avilible/long
#可以将long里面的所有代码删除,复制粘贴一下内容即可生效负载均衡
#这个写在server模块上面
upstream a.com {
server 192.168.1.127:80; #有多少个服务器就添加多少个ip
server 192.168.1.127:8080; #有多少个服务器就添加多少个ip
}
server {
listen 80 ;
server_name long;
# localtion里面
location / {
proxy_pass http://a.com; #这个地址一定是上面定义的负载均衡的名字
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
也可以加上以下两种轮训方式
1.weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
upstream a.com {
server 192.168.1.127:80 weight=5;
server 192.168.1.127:8080 weight=10;
}
2.ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
upstream a.com {
ip_hash; //实现轮询 ,一个电脑再次访问一个网站时,所访问的服务器不变
192.168.1.127:80 weight=2; //weight是权重默认是1数值越大,被访问到的概率越大。(加weight的时候,必须去掉ip_hash) //自己的网站的IP
192.168.1.127:8080; //自己网站的IP
}
- 注意,
server
后面只能写ip
,不可以写站点名 - 我们也可以只在一个服务器上做测试,只需要复制下
site-avilable/default
并改称不冲突的端口号即可。我这里改成了8080
端口
upstream模块:upstream指令主要是用于设置一组可以在proxy_pass和fastcgi_pass指令中使用代理服务器,默认负载均衡方式为轮询 ip_hash(轮询)和weight(权重)是互斥的,只可以选择使用一种方式
动静分离的配置
#可以将long里面的所有代码删除,复制粘贴一下内容即可生效负载均衡
upstream static {
server 192.168.1.127:80; #这个对应default站点
}
upstream php {
server 192.168.1.127:8080; #这个对应jin站点,我们要在
}
server {
listen 80 ;
server_name long;
index index.html index.php index.htm index.nginx-debian.html;
# localtion里面
location / {
#此处我不知道为什么这样写,我想静态的我们一般都用html
# 根据匹配php的写法,我改成 location ~\.html${ 测试发现也是可以的
proxy_pass http://static; #这个地址一定是上面定义的负载均衡的名字
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ~ \.php$ { #匹配php文件用这个代理
proxy_pass http://php; #这个地址一定是上面定义的负载均衡的名字
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
# 上面的upstream内容,严格来说不应该写在`/etc/nginx/site-avilible/long`里面,
我们应该写在`cd /etc/nginx/con.d`文件夹里。这个文件夹是个个空文件夹
`vim upstream.conf`(注意,此处名字可以随便写,但必须以.conf为后缀)
upstream static {
server 192.168.1.127:80; #这个对应default站点
}
upstream php {
server 192.168.1.127:8080; #这个对应jin站点,我们要在
}
实验。我们在
fefault
对应的站点下写index.html,test.html
,在jin
对应的站点下面写index.php,test.php
;此时我们访问http://long/index.html,http://index.php
,得到的结果分别就是我们相应站点下面的内容
user nginx nginx;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
use epoll;
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#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;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
#Tomcat的服务器集群
upstream up {
server 101.1.1.1 weight=5 max_fails=2 fail_timeout=30;
server 101.2.2.2 weight=5 max_fails=2 fail_timeout=30 down;
}
server {
listen 80;
server_name 123.com test.com;
root /usr/local;
if ($host = test.com) {
return 301 https://$host$request_uri;
}
#java服务器提供api的公共服务
location ^~ /test {
proxy_pass http://up/test;
proxy_cookie_path /up/ /;
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_connect_timeout 10;
proxy_send_timeout 30;
proxy_read_timeout 90;
}
}
# HTTPS server
#
server {
listen 443 ssl;
server_name kjzb.com;
ssl_certificate /usr/local/nginx/conf/kjzb_com.crt;
ssl_certificate_key /usr/local/nginx/conf/kjzb_com.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
location / {
root html/icp;
#如果是手机移动端访问内容
if ( $http_user_agent ~ "(MIDP)|(WAP)|(UP.Browser)|(Smartphone)|(Obigo)|(Mobile)|(AU.Browser)|(wxd.Mms)|(WxdB.Browser)|(CLDC)|(UP.Link)|(KM.Browser)|(UCWEB)|(SEMC-Browser)|(Mini)|(Symbian)|(Palm)|(Nokia)|(Panasonic)|(MOT-)|(SonyEricsson)|(NEC-)|(Alcatel)|(Ericsson)|(BENQ)|(BenQ)|(Amoisonic)|(Amoi-)|(Capitel)|(PHILIPS)|(SAMSUNG)|(Lenovo)|(Mitsu)|(Motorola)|(SHARP)|(WAPPER)|(LG-)|(LG/)|(EG900)|(CECT)|(Compal)|(kejian)|(Bird)|(BIRD)|(G900/V1.0)|(Arima)|(CTL)|(TDG)|(Daxian)|(DAXIAN)|(DBTEL)|(Eastcom)|(EASTCOM)|(PANTECH)|(Dopod)|(Haier)|(HAIER)|(KONKA)|(KEJIAN)|(LENOVO)|(Soutec)|(SOUTEC)|(SAGEM)|(SEC-)|(SED-)|(EMOL-)|(INNO55)|(ZTE)|(iPhone)|(Android)|(Windows CE)|(Wget)|(Java)|(curl)|(Opera)" )
{
root html/m.icp;
}
index index.html index.htm;
}
location ~ \.php$ {
root html/icp;
if ( $http_user_agent ~ "(MIDP)|(WAP)|(UP.Browser)|(Smartphone)|(Obigo)|(Mobile)|(AU.Browser)|(wxd.Mms)|(WxdB.Browser)|(CLDC)|(UP.Link)|(KM.Browser)|(UCWEB)|(SEMC-Browser)|(Mini)|(Symbian)|(Palm)|(Nokia)|(Panasonic)|(MOT-)|(SonyEricsson)|(NEC-)|(Alcatel)|(Ericsson)|(BENQ)|(BenQ)|(Amoisonic)|(Amoi-)|(Capitel)|(PHILIPS)|(SAMSUNG)|(Lenovo)|(Mitsu)|(Motorola)|(SHARP)|(WAPPER)|(LG-)|(LG/)|(EG900)|(CECT)|(Compal)|(kejian)|(Bird)|(BIRD)|(G900/V1.0)|(Arima)|(CTL)|(TDG)|(Daxian)|(DAXIAN)|(DBTEL)|(Eastcom)|(EASTCOM)|(PANTECH)|(Dopod)|(Haier)|(HAIER)|(KONKA)|(KEJIAN)|(LENOVO)|(Soutec)|(SOUTEC)|(SAGEM)|(SEC-)|(SED-)|(EMOL-)|(INNO55)|(ZTE)|(iPhone)|(Android)|(Windows CE)|(Wget)|(Java)|(curl)|(Opera)" )
{
root html/m.icp;
}
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param HTTPS on;
include fastcgi_params;
}
}
}
nginx
实现屏蔽IP
手册-Module ngx_stream_access_module
随便写一个 .conf结尾的配置文件, 比如我们此处用 ip.conf文件
ip.conf 文件
# 屏蔽127.0.0.1
deny 127.0.0.1;
# 屏蔽所有ip
deny all;
# 允许127.0.0.1,192.168.1.1
allow 127.0.0.1;
allow 192.168.1.1;
# 允许所有ip进入
allow all;
#屏蔽整个段即从123.0.0.1到123.255.255.254访问的命令
deny 123.0.0.0/8
#屏蔽IP段即从123.45.0.1到123.45.255.254访问的命令
deny 123.45.6.0/24
然后进入配置文件的`http`模块,或者`server`文件,或者`server`里面的`localtion`匹配模块都可以
但是我们大多的需求其实是在 server里面