'Nginx' 标签

Nginx与Varnish下获取访客的真实IP地址

首先,nginx -V 查看是否有启动 “–with-http_realip_module” 模块,必须启用才行。

sudo vi /etc/varnish/default.vcl

sub vcl_recv 模块加入:


if (req.restarts == 0) {
                if (req.http.x-forwarded-for) {
                set req.http.X-Forwarded-For =
                        req.http.X-Forwarded-For + ", " + client.ip;
                } else {
                set req.http.X-Forwarded-For = client.ip;
                }
        }
sudo vi /etc/nginx/nginx.conf

http {}模块内加入:

set_real_ip_from   127.0.0.1;
real_ip_header      X-Forwarded-For;

从一台裸VPS开始部署一个应用运行环境

从一台Ubuntu Server 14.0.4裸服务器开始,第一步,SSH登录后立马修改root密码:

passwd //根据提示输入新密码即可

SSH 安全配置,禁用root登录,新建用户并赋予root权限 - sudo
adduser newmen //新建一个用户-newmen;输入密码后,附加信息可以不用理

gpasswd -a newmen sudo //赋予newmen 通过sudo行驶root权限的能力

如果需要,还可以
visudo

在root    ALL=(ALL:ALL) ALL 这行的下面添加
newmen    ALL=(ALL:ALL) ALL // 不添加这一行,会导致文件只能上传到users所拥有的目录。

如果选择密匙的方式登录SSH,需进行公私密匙在本地和服务器端部署。

修改默认SSH端口22
vi /etc/ssh/sshd_config
Port 22 改为  Port 一个自定义端口(端口必须在1025与65536之间)
Protocol 2

禁用root登录以及
将PermitRootLogin yes 更改为 PermitRootLogin no

最后在最末行添加
UseDNS no
AllowUsers newmen

重启SSH服务
service ssh restart 或者 reload ssh

最后登登录SSH的方式
ssh -p 端口 newmen@IP地址

安装防火墙 iptables:

查看默认规则
sudo iptables -L 或者 sudo iptables -S

sudo iptables -F //弃用默认的规则

sudo iptables -P INPUT ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -F

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT //添加允许当前SSH链接规则,-A INPUT中的—A表示添加该规则到底部

sudo iptables -L //查看规则有哪些变化

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT //允许SSH端口通过,22改为自定义端口
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT //开放80端口

sudo iptables -I INPUT 1 -i lo -j ACCEPT //-I 告诉iptables插入该规则。 1表示需要一个链条和新规则要插的位置

sudo iptables -S //查看修改后的规则

sudo iptables -P INPUT DROP

保存配置的iptables规则,并选择自动加载当前规则

sudo apt-get update
sudo apt-get install iptables-persistent

搭建LEMP环境+Varnish 4X

sudo apt-get update
sudo apt-get install nginx
sudo apt-get install mysql-server
sudo mysql_install_db
sudo mysql_secure_installation //输入mysql root密码后,根据提示删除多余的数据
sudo apt-get install php5-fpm php5-mysql

sudo vi /etc/php5/fpm/php.ini
将cgi.fix_pathinfo=1 修改为 cgi.fix_pathinfo=0 //安全设置

sudo service php5-fpm restart

sudo vi /etc/nginx/sites-available/default
将内容更改为
server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /usr/share/nginx/html;
    index index.php index.html index.htm;

    server_name server_domain_name_or_IP;

    location / {
        try_files $uri $uri/ =404;
    }

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

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

sudo service nginx restart

sudo vi /usr/share/nginx/html/info.php //测试php是否成功安装


浏览 http://server_IP/info.php ,看到PHP服务信息,基表示成功

sudo rm /usr/share/nginx/html/info.php

安装 Varnish 4X

apt-get install apt-transport-https
curl https://repo.varnish-cache.org/GPG-key.txt | sudo apt-key add -
echo "deb https://repo.varnish-cache.org/ubuntu/ trusty varnish-4.0" >> /etc/apt/sources.list.d/varnish-cache.list
apt-get update
apt-get install varnish

sudo vi /etc/default/varnish
DAEMON_OPTS="-a :80 \ //端口改为80

vi /etc/varnish/default.vcl //加入自己想加入的任何规则

sudo /etc/init.d/nginx restart
sudo /etc/init.d/varnish restart

PHP 罢工之 ~ 111: Connection refused) while connecting to upstream

关于PHP的这个错误:

connect() failed (111: Connection refused) while connecting to upstreamclient: 123.xx.xx.xxx, server: ~.com, request: "GET ...... HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "www.~.com" 

curl -I IP //可以连接
telnet IP 80 //远程主机连不上

哪么就重启
service nginx restart //还是不行甚至reboot服务器

Less -N ……nginx.log 就看到了上面的错误

解决办法有很多,但是下面这个适合我:
sudo vi /etc/nginx/nginx.conf 在http区块加入

http {
...
fastcgi_buffers 8 16k;
fastcgi_buffer_size 32k;
...
}

Nginx 结合 GeoIP 来减少WordPress的垃圾评论

这个方法的效果还是比较理想的。新版的Nginx 一般默认支持GeoIP了,否则须编译支持之。

检查是否支持GeoIP

执行 nginx -V

输出的结果如果看到有“http_geoip_module” 则表示Nginx 已支持 GeoIP

接下来执行

wget -N http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
gunzip GeoIP.dat.gz
mv GeoIP.dat /usr/share/GeoIP/

这样一来就可以用上最新的IP数据库

执行 vi /etc/nginx/nginx.conf
在http{}模块里加入
geoip_country /usr/share/GeoIP/GeoIP.dat;

然后到站点配置文件中加入下面的规则

set $cc "";
if ($request_uri = /wp-comments-post.php) {
        set $cc $geoip_country_code;
}
if ($cc ~ (CN|KR|RU|UA)) {
        return 444;
}

(CN|KR|RU|UA)) 这里可以根据实际需要屏蔽那些国家的IP

检查修改是否被正确修改
执行 nginx -t 或 service nginx configtest 或者 /etc/init.d/nginx configtest

检查无误,然后重启Nginx
nginx -s reload 或 service nginx reload 或 /etc/init.d/nginx reload

Nginx 优化及安全配置

通过给nginx.conf文件加入一些规则可以起到优化配置及加固安全方面的作用~例如屏机器人或垃圾留言。

一,首先开始优化配置

执行 grep processor /proc/cpuinfo | wc -l //检查VPS的CPU是多少核,例如输出结果是1,就是一核
执行 ulimit -n //查看核的限制,例如1G内存的VPS,得到的结果一般时1024;此外可以执行 ulimit -Sn 查看的是软限制,ulimit -Hn 查看的是硬限制。

执行 sudo vi /etc/nginx/nginx.conf

worker_processes 1; //将1改为VPS的实际CPU核芯数
worker_connections 1024; //1024改为核的限制数(即ulimit -n后输出的结果)

缓冲区优化
client_body_buffer_size 10K;
client_header_buffer_size 1k;
client_max_body_size 8m;
large_client_header_buffers 4 4k/8k; //默认为4或8K,如果这里的数字设置低于或大于默认值,当你在登录网站后台时就会得到“400 Bad Request – request header or cookie too large” 这个错误。

超时优化配置

Nginx Ubuntu Varnish WordPress – Amazon EC2

这里以Ubuntu 12.04 LTS为例,和Nginx,Varnish来搭建WordPress运行环境。

EC2的SSH登录名称是ubuntu,需要转到root状态下。

sudo -i

安装MySQL
apt-get install mysql-server mysql-client
过程中按提示设置root SQL password

安装Nginx
apt-get install nginx
/etc/init.d/nginx start
访问你实例的公共DNS URL,就会见到Welcome to nginx!’

配置防火墙
ufw allow ssh
ufw allow http
ufw enable
ufw status

安装PHP,通过PHP-FPM安装PHP和Mysql扩展
apt-get install php5-fpm php5-mysql

解决WordPress安装插件时需要FTP登录的问题

WordPress的运行环境是Amazon的AWS Free EC2+Nginx,在安装插件时头一回见要输入FTP登录信息。如果VPS上自行搭建的Web server环境没安装FTP,可以直接修改wp-config.php 文件,在里面加入

define('FS_METHOD', "direct");
另一方法(尝试后不成功):
if(is_admin()) {
add_filter(‘filesystem_method’, create_function(‘$a’, ‘return “direct”;’ ));
define( ‘FS_CHMOD_DIR’, 0751 );
}

PS:EC2上安装Nginx+Ubuntu+WordPress如果安装PHP过程中,出现404出错,可执行更新即可解决。
apt-get update

在线转换Apache重写规则到Nginx重写规则

Apache重写规则 .htaccess很实用,但随着流量增大转到VPS上是必然的事情,而现在Web服务器中Nginx已经成为首选,所以将Apache原先的重写规则转到Nginx重写规则 也不算是件容易的事情。这个http://www.anilcetin.com/网站就是可以在线件将.htaccess转到Nginx重写规则的服务apache2nginx。 apache2nginx托管在github上 https://github.com/mow/apache2nginx。