nginx 做laravel的https前代

前两天出去一趟,发现在国外竟然无法通过http连接国内的动态ip的服务器了,即使是非标准的都不可以,但https却无问题,那么,来加密吧。

弄了之后,发现了两个问题

  • 跳转的链接还是http的

这个在网上找了下,发现了下面的函数可以强制走https

URL::forceSchema("https");
  • 在登录后跳转到指定目标地址,自动转换为http了

经过不断的调试排错,最后发现是关于反向代理的时候,需要设置一个信任代理的列表,这个列表默认为空的,最简单的方式就是使用下面的,信任所有ip

Request::setTrustedProxies(['0.0.0.0/0']);

其他的关于nginx的配置,随便抄个就行

nginx使用rewrite机制实现缓存

问题起始的需求

为了某个傻傻的想法,将所有的动态的页面变成静态页面。因为图像之类的保存位置也是在 数据库中,因此,这些统统都变成了php的访问请求

碰到的问题症状

进行了问题解决之后,发现图像之类的每次都需要从服务器上下载,这样对服务器的压力比 较大,而这些图片大部分都没有进行过任何更改

解决的思路

通过在服务器上创建一个缓存的文件,如果缓存文件不存在的时候,再请求php执行,在php 执行过程中,顺便将新的文件放置到缓存文件中,这样 下次的下次 的请求的时候,就会 出现文件未修改(服务器返回304),就不需要从服务器上再次下载了。

nginx的配置

if (!-f $latex request_filename) {
  rewrite "^/dev/getfile/(.+)$" /dev/getfile.php?$1& last;
 }

我在getfile.php中将所有允许缓存的文件都放在/dev/getfile目录下,因此,在请求时, 如果缓存文件存在的话,就不调用getfile.php文件,如果不存在的话,则调用getfile.php, 而在getfile.php中,会将不存在的文件重新创建到指定目录下,这样依赖,在 下次 调 用的时候,由于是新文件,则不调用getfile.php文件而重新传输,在 下次的下次 调用 的时候,文件未更改则不用重新传输了。

nginx+gerrit配置的密码访问

网站服务器运行在Raspberry pi下,我将路由器上原来的nfs等等服务
同样搬到了pi下,原来路由器上还运行一个git的服务器,但既然现在运行
的硬件环境比原来好了,就准备换成gerrit了。

发现gerrit支持http的push,这样就比ssh的那一串方便多了。就想配
置一下,折腾了许久,才折腾成功。

以下是nginx侧的相关配置:

        location /git/login/ {
                stub_status on;
                auth_basic "Restricted";
                auth_basic_user_file /home/git/pwd;
                proxy_set_header X-Forwarded-For $remote_addr;
                proxy_set_header Host $host;
                proxy_pass http://127.0.0.1:8081;
        }
        location ^~ /git {
                root /usr/share/nginx/html;
                index index.html index.htm;
                stub_status on;
                auth_basic "Restricted";
                proxy_pass http://127.0.0.1:8081;
                proxy_set_header X-Forwarded-For $remote_addr;
                proxy_set_header Host $host;
        }
       

简要说明一下, /git/login/里的设置是通过网页访问时的授权设置,
这个设置保证但用户通过网页访问时,使用的密码配置文件使用的是
/home/git/pwd,这个文件是使用apache-utils中的htpasswd生成的。

~/git下面的访问,使用的是gerrit的密码授权管理,当通过http提交
代码的时候,使用的是gerrit的帐号和密码,这个密码和通过网
页是不一样的,在用户的setting->HTTP Password中生成的,这个密码是
一个随机的。
这样子即保护了网页访问的安全性,也保证了提交
的安全性和访问的方便性。

openwrt相关配置(2):http服务器相关配置

我的openwrt上运行的http服务器是nginx,相比lighthttp,nginx更高
效些,占用资源感觉更少些。对于自带的uhttp服务,只能保留,不然路由
器的网络界面就没办法进入了。如上篇所说,修改了默认的uhttpd服务器
端口号,这样nginx作为主要的http服务器界面出来了。

以下是nginx的相关配置,这里我将文件分开存放了,这样比较直观,
而且,配置的nginx,只支持一个站点,毕竟,路由器的资源很有限。

       user nobody nogroup;
       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 {
       worker_connections  1024;
       use epoll; #使用epoll,更高效,我在实际使用过程中,感受不到,获取是自己从来不曾注意
       multi_accept on;
       }

       http {
       include       mime.types;
       include wordpress.conf; #wordpress的相关配置,会引用php的配置文件
       default_type  application/octet-stream;
       sendfile        on;
       keepalive_timeout  65; #修改超时时间
       }
       

其他的内容都删除或者注释掉了。下面是核心的wordpress配置相关的
内容了:

继续阅读openwrt相关配置(2):http服务器相关配置

openwrt相关配置(1):软件列表及杂项配置

先记录在这里,以后有了新的再更新:

       opkg update
       opkg install
bash   #shell
blkid   #查看磁盘ID,挂载磁盘使用
block-mount #挂载磁盘
coreutils
coreutils-ls #emacs需要
coreutils-stty #emacs需要
curl           #下载
ddns-scripts #动态dns
fdisk        #察看磁盘分区
kmod-fs-ext4 #U盘分区格式支持
kmod-gre     #vpn分流使用
kmod-mppe    #pptp vpn使用
kmod-nls-base #忘了,好像是文件系统依赖
kmod-nls-utf8 ##忘了,好像是文件系统依赖
kmod-ppp      #vpn使用
kmod-pptp     #vpn使用
kmod-scsi-core #挂载磁盘
kmod-usb-core  #挂载磁盘
kmod-usb-ohci  #挂载磁盘
kmod-usb-storage #挂载磁盘
kmod-usb-storage-extras #挂载磁盘
kmod-usb2               #usb2.0 挂载磁盘
luci-app-ddns           #网页配置ddns
luci-app-samba          #网页配置samba服务器
luci-app-upnp           #网页配置upnp服务
luci-i18n-chinese       #网页中文语言支持
miniupnpd               #upnp支持
mysql-server            #mysql服务器
nginx                   #nginx http服务器
openssh-keygen          #openssh服务器需要
openssh-server          #openssh服务器,关键是支持端口转发等可用来翻墙的功能
openssh-sftp-server     #openssh自带的sftp服务
php5                    #php5
php5-fastcgi            #php5-fastcgi,nginx需要
php5-mod-ctype          #php模块
php5-mod-curl           #php模块
php5-mod-exif           #php模块
php5-mod-fileinfo       #php模块
php5-mod-ftp            #php模块
php5-mod-gd             #php模块
php5-mod-gettext        #php模块
php5-mod-hash           #php模块
php5-mod-iconv          #php模块
php5-mod-json           #php模块
php5-mod-libevent       #php模块
php5-mod-mbstring       #php模块
php5-mod-mcrypt         #php模块
php5-mod-mysql          #php模块
php5-mod-openssl        #php模块
php5-mod-session        #php模块
php5-mod-sockets        #php模块
php5-mod-xml            #php模块
php5-mod-xmlreader      #php模块
php5-mod-xmlwriter      #php模块
php5-mod-zip            #php模块
ppp-mod-pptp            #vpn的pptp模式
samba36-server #nfs服务器
subversion-client #subversion库,定时检查hosts文件的脚本需要使用subversion
subversion-libs #subversion库,定时检查hosts文件的脚本需要使用subversion
swap-utils #swap分区工具
vsftpd #ftp服务其
zlib #压缩与解压做
zoneinfo-asia #亚洲区域支持
zoneinfo-core #php需要
       

软件的各部分功能就像注释中所写,里面最多的就是php部分了,一些模块并不是必须的,只是我有时会随便检查一下什么的,就将常用的都安装了。

安装完软件最好直接重启下,相关服务先都不要启用。

ssh服务器的相关配置

修改dropbear服务器的端口为非22端口(/etc/dropbear),因为我使用openssh服务器,而不是自带的。

修改openssh服务器配置(/etc/ssh/sshd_config),添加GatewayPorts yes和Compression yes两项,前一个打开端口转发,后一个启用压缩,可以提高传输速度

http服务器相关配置

修改uhttpd服务器的端口为非80端口(/etc/uhttpd),因为我要将nginx的服务器作为主要使用的http服务器

其他的零碎配置根据自己需要了。

关于翻墙的配置可参照《openwrt vpn自动分流翻墙》

我用的是Buffalo WZR-HP-AG300H,如果刷成了砖,可参照《openwrt的一些设置》

如果网络像我现在的网络一样的非常频繁的抽风,可修改/etc/ppp/options中的lcp-echo-failure和lcp-echo-interval两个值,默认分别为5和1,这样的话,如果网络卡住5秒钟的话,路由器就会判断掉线,进行重播,增大这两个值其实是降低判断的严格性。