使用Nigix做反向代理

反向代理

由于准备在服务器上跑多个web服务,想通过子域名而不是端口指向不同的应用,因此参考了文档使用nigix做了反向代理,之前没有接触过nigix,结果发现出乎意料的简单,在这里简单记录一下:
安装nigix $ sudo apt-get install nginx
为ghost创建配置文件 sudo nano /etc/nginx/sites-available/ghost.conf,稍后说文件内容
创建软连接 $ sudo ln -s /etc/nginx/sites-available/ghost.conf /etc/nginx/sites-enabled/ghost.conf
启动nigix,$ sudo service nginx start
搞定~
说一下nigix的配置文件,格式大概是

server {
    listen 80;
    server_name test1.example.com;

    location / {
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   Host      $http_host;
        proxy_pass         http://127.0.0.1:2368;
    }
}

如果使用ip作为server_name,后面应该带上端口,如127.0.0.1:80,如果想通过不同子域名指向不同的端口,只需要在配置文件中继续加server配置块,如

server {
    listen 80;
    server_name test2.example.com;

    location / {
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   Host      $http_host;
        proxy_pass         http://127.0.0.1:8081;
    }
}

如果不是根目录,location的 “/” 可以换成相应的路径
如果想禁止ip访问,可以
加上

server {  
      listen 80 default;  
      return 500;  
   } 

或将访问重定向

server {  
       listen 80 default;  
       rewrite ^(.*) http://www.example.com permanent;  
   } 

日志切割

使用apt-get命令安装nginx会自动配置logrotate,可以定期对日志切割,其配置文件在/etc/logrotate.d/下,可以自行修改,也可以使用以下方式自己配置日志切割:

创建切割日志文件的脚本
vi /etc/nginx/nginx_access_log.sh

# !/bin/bash
log_path="/usr/local/nginx/logs/"
mv ${log_path}access.log ${log_path}access_$(date -d "yesterday" +%Y%m%d).log
nginx_pid=`ps aux |grep -E 'nginx: master process'|grep -v 'grep'|awk '{print $2}'`
kill -USR1 $nginx_pid

添加定时命令,执行:
crontab -e,在文件中添加如下内容

0 17 * * * sh /*/nginx_access_log.sh 

同理添加日志压缩脚本:
vi /etc/nginx/nginx_gz_log.sh

# !/bin/bash
log_path="/var/log/nginx/"
tar -czf ${log_path}access_$(date -d "1 month ago" +%Y%m).tar.gz access_$(date -d "1 month ago" +%Y%m)*.log
rm access_$(date -d "1 month ago" +%Y%m)*.log

添加定时命令,执行:
crontab -e,在文件中添加如下内容

0 1 1 * * sh /etc/nginx/nginx_gz_log.sh