标签存档: nginx

使用Nginx反向代理,多进程共享80端口

如果你需要不同的进程使用80端口(nginx与iis共同使用80)怎么办?
如果不想在你本地调试微信平台(微信非API要80端口,但是电信把80禁用了)怎么办?
如果你需要做均衡负载 怎么做?

名词解释:反向代理
总之就是你请求这个服务器,它负责帮你去请求别的服务器,把返回的结果再返回给你,在中间当传话筒。

nginx配置:

server { 
listen       80; 
#nginx绑定的的访问域名
server_name  test.sgfblog.com;   /
location / { 
#实际请求的地址
 proxy_pass http://sungfeng21.vicp.net:8088; 
 proxy_set_header   Host    $host; 
 proxy_set_header   X-Real-IP   $remote_addr; 
 proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
 }
} 

利用这个原理,同样都是80端口,可以把指定的站点转发到别的服务(端口)上,你的IIS换个别的端口对内网访问就OK啦~

nginx – 优化冗余路径配置。

server {
        listen       80;
        server_name  phpmyadmin.lezi.com;
        location / {
            root   /var/www/html/phpMyAdmin;
            index  index.php;
        }
            location ~ \.php$ {
                        root  /var/www/html/phpMyAdmin;
                        fastcgi_pass www.sgfblog.com:9000;
                        fastcgi_index index.php;
                        fastcgi_param SCRIPT_FILENAME /var/www/html/phpMyAdmin$fastcgi_script_name;
                        fastcgi_param  PATH_INFO $request_uri;
                        include fastcgi_params;
           }
   }

上面配置中可以看出路径非常冗余,如过修改路径需要改三个地方,
其实可以set一个变量,将路径写入变量,这样就下次修改的时候就只需要修改1个变量就好了。如下:

server {
        listen       80;
        server_name  phpmyadmin.lezi.com;
        set $root '/var/www/html/phpMyAdmin';
        location / {
            root   $root;
            index  index.php;
        }
            location ~ \.php$ {
                        root  $root;
                        fastcgi_pass www.sgfblog.com:9000;
                        fastcgi_index index.php;
                        fastcgi_param SCRIPT_FILENAME $root$fastcgi_script_name;
                        fastcgi_param  PATH_INFO $request_uri;
                        include fastcgi_params;
           }
   }

Nginx之 – 基于ip和域名的虚拟主机

虚拟主机可以基于ip和域名配置略有不通,一起来看下。

基于域名的虚拟主机:

http{
  server{
      listen 80;
      server_name www.sgfblog.com sgfblog.com; #第1个虚拟主机的域名列表,空格隔开
      location /{ ... }
  }
  server{
      listen 80;
      server_name www.apisky.net; #第2个虚拟主机的域名列表
      location /{ ... }
  }
}

基于ip的虚拟主机:

这类配置常用于本地开发,众所周知A类ip地址为1-126,而B类则为128-191。其中127不是凭空消失了,而是用于回文地址。也就是说127的ip地址会指向本机。

为了方便本地有多个站点时可以配置www.sgfblog.com 127.0.0.2 127.0.0.3为不同站点。配置如下:
继续阅读 »

nginx之 – 正向代理

在nginx配置中加入一段server配置。就可以实现整正向代理了。其中resolver 代表的是设置代理的dns服务器。这里写的是google的公用dns服务器。

server{
       listen 8080;
       location /{
          resolver 8.8.8.8;
          proxy_pass $scheme://$host$request_uri;
       }
    }

注意:$scheme://$host$request_uri; 这个为转发到用户请求的地址,这样写可以支持多种协议。
网上的参考例子多数写的是 http://$host$request_uri; 这样的话将不支持https等的代理。

使用方法以ie为例:
工具→Internet选项→连接→局域网设置→为Lan使用代理服务器→ ip地址填写nginx所在的ip地址,端口号既为上面linsten的端口号,

Nginx之 – Rewrite

都知道使用apache的时候可以使用.htaccess进行为静态的重定向配置。

nginx也可以,单略有不同

首先在

/etc/nginx/nginx.conf文件内
相应的server{} 中加入以下代码,然后我们就可以在nginx.htaccess中编写rewrite规则了。
include nginx.htaccess;

ngixn rewrite 的相关指令有:if rewrite set return break等。
看个简单的例子:

if ($host ~* ^(.*?)\.sgfblog\.com$) {
set $var_host '1';
}
if ($host ~* ^192\.168\.1\.(.*?)$) {
set $var_host '1';
}
if ($host ~* ^localhost) {
set $var_host '1';
}
if ($host ~* ^127\.0\.0\.(.*?)$) {
set $var_host '1';
}
if ($var_host !~ '1') {
rewrite ^/(.*)$ $scheme://www.sgfblog.com/$1 redirect;
}

解释一下上述语句的意思:

上面4个if语句都是只有有一个成立就会使用set 把一个变量设置成1
最后1个语句 只要这个变量为1,就执行重定向。

$host 指的是主机名,也就是访问网址。

如果主机名不是*.sgfblog.com也不是192.168.1.*也不是localhost也不是127.0.0.*
那么将执行跳转。

rewrite ^/(.*)$ $scheme://www.sgfblog.com/$1 redirect;
/(.*)$可以匹配根任意字符路径,
$scheme://www.sgfblog.com/$1 则是被重定向到地址
$scheme 代表协议 可以说http 或 https等
$1 代表匹配时第1处符合的字符串 ,也就是原路径。

redirect代表302重定向,会在url头里改变。

if语句解说


1、变量名不能为空值或者0开头
2、可以使用等于号(=),不等于号(!=)来运算
3、可以使用正则 ~*(不区分大小写) 和 ~(区分大小写)进行匹配
4、!~和 !~*表示不匹配
5、-f 和!-f 表示文件是否存在
6、-d 和 !-d 表示目录是否存在
7、-x 和 !-x表示是否可以执行

支持的flag标签有


标签 解释
last apache中的[L]表示完成rewrite
break 终止匹配
permanent 301
redirect 302

继续阅读 »

nginx之 – https协议,ssl证书配置

一、什么是https

简单的说,他就是安全加强版的http。
二、https的应用

1、网银类支付类平台

2、需要保证数据安全的oa办公平台

3、注册类、用户中心、代理平台

4、开放接口类

5、耍酷类 (我就属于这种类别)

三、SSL证书

1、https需要依靠ssl证书,在服务器和客户端直接进行加密解密数据传输。该证书由ca颁发,可以在证书颁发机构申请或购买,也可以自行制作。

2、证书生成
windows2003下管理工具中“证书颁发机构”可以实现证书制作。
inux下可以使用openssl 命令制作证书。

# openssl genrsa -des3 -out sgfblog.com.key 1024
# openssl req -new -key sgfblog.com.key -out sgfblog.com.csr
# openssl rsa -in sgfblog.com.key -out sgfblog.com.nopass.key

最后一个命令是为了生成不带密码的证书文件。具体过程不再详详述。

四、Nginx配置

Nginx服务器的安装与配置请参考 http://www.sgfblog.com/archives/140

https 采用的默认端口是443,配置如下:

server{
        listen      443;
        server_name  www.sgfblog.com;

        location / {
            root   /var/www/html;
            index  index.php;
        }
        include /var/www/html/nginx.htaccess;

        error_page  404              /404.html;
        location = /404.html {
            root   /usr/share/nginx/html;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }

        location ~ \.php$ {
            root           /var/www/html;
            fastcgi_pass   www.sgfblog.com:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /var/www/html$fastcgi_script_name;
            include        fastcgi_params;
        }

        ssl on;
        ssl_certificate /var/www/cert/sgfblog.com.crt;
        ssl_certificate_key /var/www/cert/sgfblog.com.nopass.key;

    }

可以看出上述配置与普通的站点配置有所不同(第2行不同、新增了29-31行)
第2行监听的不再是80端口,而是443了。
ssl on; 指的是开启ssl
ssl_certificate 指的是crt文件的地址
ssl_certificate_key 指的是key文件的地址。

然后重新启动nginx就可以

service nginx restart

需要主要的是key如果是带密码才能引入的,在(重新)启动nginx需要输入密码。所以上文说生成了个nopass的key文件。
如果nginx是开机自动启动的并且key文件需要密码,那么再登陆系统之前就会有控制台让你输入这个密码,比较麻烦。

nginx之 – 安装与配置

1、启用 EPEL repo

# rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm

2、安装nginx

yum -y install nginx

3、配置 PHP FastCGI

# yum install php-pear-Net-Socket php-pear php-common php-gd php-devel php php-mbstring php-pear-Mail php-cli php-imap php-snmp php-pdo php-xml php-pear-Auth-SASL php-ldap php-pear-Net-SMTP php-mysql

4、安装spawn-fcg
继续阅读 »