淘淘商城-Nginx+FTP搭建图片服务器

Nginx

参看[淘淘商城-Nginx笔记]

FTP配置

http://blog.sina.com.cn/s/blog_a97c78020101o8fv.html

参看[淘淘商城-搭建FTP服务器]

整合Nginx和FTP

1.用户登录ftp的根目录

vi /etc/vsftpd/vsftpd.conf

添加如下内容

# 用户登录路径
local_root=/home/
# 锁定用户到各自目录为其根目录
chroot_local_user=YES
# 用户配置目录
user_config_dir=/etc/vsftpd/userconfig

创建/etc/vsftpd/userconfig

mkdir userconfig
cd userconfig/

配置各自用户访问根目录
vim ftpuser
添加

local_root=/home/ftpuser/www/

重启服务

/etc/init.d/vsftpd restart

2.配置nginx root路径为ftp路径

配置Nginx主目录

vi /usr/local/nginx/conf/nginx.conf

修改内容

server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   /home/ftpuser/www/;
            index  index.html index.htm;
        }

此时:

Nginx主目录:/home/ftpuser/www/

Vsftpd.config : local_root=/home/
Userconfig/ftpuser : local_root=/home/ftpuser/www/

由于我们使用的是自定义root路径,如果权限不够,在访问图片的时候可能会报403错误。所以我们需要在nginx.conf 里配置user root
QQ截图20160905140758.png

添加如下内容

QQ截图20160905144137.png

此时上传的根目录变成了 : /images
资源的访问url : http://192.168.2.11/images/a.jpg

杂项

客户端连接FTP服务器:

QQ截图20160905142301.png

CentOS使用命令行启动

打开/etc/inittab 文件

vi /etc/inittab

在默认的 run level 设置中,可以看到第一行书写如:id:5:initdefault:(默认的 run level 等级为 5,即图形界面)

将第一行的 5 修改为 3 即可。保存文件后重启系统你就可以看见是启动的文本界面了。

淘淘商城-搭建FTP服务器

1.前期准备

因为穷,所以使用的是VMware虚拟机来搭建

  1. 安装CentOS虚拟机(如果你有服务器更好)
  2. 准备IP地址(虚拟机内网 : 192.168.2.100),并配置好
  3. 准备客户端连接软件(FileZilla/Xftp/EditPlus)

2.开始安装

2.1安装vsftpd组件

[root@localhost ~]# yum -y install vsftpd

安装完后,有/etc/vsftpd/vsftpd.conf 文件,是vsftp的配置文件。

2.2添加一个ftp用户并设置密码

[root@localhost ~]# useradd ftpuser

此用户就是用来登录ftp服务器用的。登录后默认的路径为 /home/ftpuser

[root@localhost ~]# passwd ftpuser

输入两次密码后修改密码。 密码:123

2.3防火墙开启21端口

因为ftp默认的端口为21,而centos默认是没有开启的,所以要修改iptables文件

[root@localhost ~]# vim /etc/sysconfig/iptables

在行上面有22 -j ACCEPT 下面另起一行输入跟那行差不多的,只是把22换成21,然后:wq保存。

修改后的内容如下:

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

还要运行下,重启iptables防火墙

[root@localhost ~]# service iptables restart

2.4修改selinux

外网是可以访问上去了,可是发现没法返回目录(使用ftp的主动模式,被动模式还是无法访问),也上传不了,因为selinux作怪了。

执行以下命令查看状态:

[root@localhost ~]# getsebool -a | grep ftp  
allow_ftpd_anon_write --> off
allow_ftpd_full_access --> off
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
ftp_home_dir --> off
ftpd_connect_db --> off
ftpd_use_passive_mode --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off

执行上面命令,再返回的结果看到allow_ftpd_full_access和ftp_home_dir两行都是off,代表,没有开启外网的访问

[root@localhost ~]# setsebool -P allow_ftpd_full_access on
[root@localhost ~]# setsebool -P ftp_home_dir on

这样应该没问题了(如果,还是不行,看看是不是用了ftp客户端工具用了passive模式访问了,如提示Entering Passive mode,就代表是passive模式,默认是不行的,因为ftp passive模式被iptables挡住了,下面会讲怎么开启,如果懒得开的话,就看看你客户端ftp是否有port模式的选项,或者把passive模式的选项去掉。如果客户端还是不行,看看客户端上的主机的电脑是否开了防火墙,关吧)

2.5关闭匿名访问

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf

anonymous_enable=YES改为anonymous_enable=NO

3.关闭匿名访问.png

重启ftp服务

[root@localhost ~]# service vsftpd restart

2.6开启被动模式

默认是开启的,但是要指定一个端口范围,打开vsftpd.conf文件,在后面加上

pasv_min_port=30000
pasv_max_port=30999

表示端口范围为30000~30999,这个可以随意改。改完重启一下vsftpd
由于指定这段端口范围,iptables也要相应的开启这个范围,所以像上面那样打开iptables文件。
也是在21上下面另起一行,更那行差不多,只是把21 改为30000:30999,然后:wq保存

修改后的内容如下:

# Generated by iptables-save v1.4.7 on Sat Sep  3 13:04:11 2016
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [9:1116]
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 30000:30999 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Sat Sep  3 13:04:11 2016

重启iptables防火墙

[root@localhost ~]# service iptables restart

2.7设置开机启动vsftpd ftp服务

[root@localhost ~]# chkconfig vsftpd on

3.客户端连接工具介绍

3.1FileZilla

哈哈 这个没用过 虽然视频里面讲的是这个工具

3.2Xftp

一图胜千言
QQ截图20161102120402.png

3.3EditPlus

五图胜千言

1.png

2.png

3.png

4.png

5.png

总结

我竟然不知道EditPlus居然能连接FTP服务器,这样的话用这个东西来修改服务器配置就方便多了,不用再一点一点vim了(原谅我只会vim简单操作).

说明

这篇文章整理自黑马JavaEE的课程笔记中,外加了点自己的实践的东西
加油学,闪光之前总是要经历黑暗.^_^

淘淘商城-Nginx笔记

Nginx

1.介绍

Nginx(“engine x”)是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。
在高连接并发的情况下,Nginx是Apache服务器不错的替代品。

2.安装Nginx

2.1 安装环境

配置Nginx的安装环境:

yum install gcc-c++
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel

2.2 安装Nginx

下载nginx

wget http://nginx.org/download/nginx-1.8.0.tar.gz

解压

tar -zxvf nginx-1.8.0.tar.gz

进入目录

cd nginx-1.8.0

配置configure

./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi

注意:上边将临时文件目录指定为/var/temp/nginx,需要在/var下创建temp及nginx目录

编译生成Makefile

make

安装

make install

nginx安装成功截图

nginx安装成功.png

3.Nginx常用命令

3.1 启动Nginx

cd /usr/local/nginx/sbin/
./nginx 

查询nginx进程:
QQ截图20160905111916.png

4780是nginx主进程的进程id,4781是nginx工作进程的进程id

注意:执行./nginx启动nginx,这里可以-c指定加载的nginx配置文件,如下:
./nginx -c /usr/local/nginx/conf/nginx.conf
如果不指定-c,nginx在启动时默认加载conf/nginx.conf文件,此文件的地址也可以在编译安装nginx时指定./configure的参数(–conf-path= 指向配置文件(nginx.conf))

3.2 停止nginx

方式1 : 快速停止

cd /usr/local/nginx/sbin
./nginx -s stop

此方式相当于先查出nginx进程id再使用kill命令强制杀掉进程。
方式2 : 完整停止(建议使用):

cd /usr/local/nginx/sbin
./nginx -s quit

此方式停止步骤是待nginx进程处理任务完毕进行停止。

3.3 重启nginx

方式1 : 先停止再启动(建议使用)
对nginx进行重启相当于先停止nginx再启动nginx,即先执行停止命令再执行启动命令。

./nginx -s quit
./nginx

方式2 : 重新加载配置文件
当nginx的配置文件nginx.conf修改后,要想让配置生效需要重启nginx,使用-s reload不用先停止nginx再启动nginx即可将配置信息在nginx中生效

./nginx -s reload

Nginx无法站外访问?

QQ截图20160905112152.png

这是一个很尴尬的场面,传智的教程里面没有提到这一部分内容.此部分内容来自互联网和我自己的实践.

刚安装好nginx一个常见的问题是无法站外访问,本机wget、telnet都正常。而服务器之外,不管是局域网的其它主机还是互联网的主机都无法访问站点。如果用telnet的话,提示:
正在连接到192.168.0.xxx…不能打开到主机的连接, 在端口 80: 连接失败
CentOS防火墙在虚拟机的CENTOS装好APACHE不能用,郁闷,解决方法如下

/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT 
/sbin/iptables -I INPUT -p tcp --dport 22 -j ACCEPT 

如果还无法访问,则需配置一下Linux防火墙:

iptables -I INPUT 5 -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

然后保存:

/etc/rc.d/init.d/iptables save 

centos 5.3,5.4以上的版本需要用

service iptables save 
来实现保存到配置文件。 

这样重启计算机后,CentOS防火墙默认已经开放了80和22端口。
这里应该也可以不重启计算机:

/etc/init.d/iptables restart 

CentOS防火墙的关闭,关闭其服务即可:

查看CentOS防火墙信息:/etc/init.d/iptables status 
关闭CentOS防火墙服务:/etc/init.d/iptables stop 

永久关闭?不知道怎么个永久法:

chkconfig –level 35 iptables off。

QQ截图20160905112441.png

再次访问即可使用
QQ截图20160905112534.png

4.开机自启动nginx

4.1 编写shell脚本

这里使用的是编写shell脚本的方式来处理

vi /etc/init.d/nginx

输入下面的代码

#!/bin/bash
# nginx Startup script for the Nginx HTTP Server
# it is v.0.0.2 version.
# chkconfig: - 85 15
# description: Nginx is a high-performance web and proxy server.
#              It has a lot of features, but it's not for everyone.
# processname: nginx
# pidfile: /var/run/nginx.pid
# config: /usr/local/nginx/conf/nginx.conf
nginxd=/usr/local/nginx/sbin/nginx
nginx_config=/usr/local/nginx/conf/nginx.conf
nginx_pid=/var/run/nginx.pid
RETVAL=0
prog="nginx"
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
[ -x $nginxd ] || exit 0
# Start nginx daemons functions.
start() {
if [ -e $nginx_pid ];then
   echo "nginx already running...."
   exit 1
fi
   echo -n $"Starting $prog: "
   daemon $nginxd -c ${nginx_config}
   RETVAL=$?
   echo
   [ $RETVAL = 0 ] && touch /var/lock/subsys/nginx
   return $RETVAL
}
# Stop nginx daemons functions.
stop() {
        echo -n $"Stopping $prog: "
        killproc $nginxd
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && rm -f /var/lock/subsys/nginx /var/run/nginx.pid
}
# reload nginx service functions.
reload() {
    echo -n $"Reloading $prog: "
    #kill -HUP `cat ${nginx_pid}`
    killproc $nginxd -HUP
    RETVAL=$?
    echo
}
# See how we were called.
case "$1" in
start)
        start
        ;;
stop)
        stop
        ;;
reload)
        reload
        ;;
restart)
        stop
        start
        ;;
status)
        status $prog
        RETVAL=$?
        ;;
*)
        echo $"Usage: $prog {start|stop|restart|reload|status|help}"
        exit 1
esac
exit $RETVAL

然后 :wq 保存并退出(别告诉我你不会这个)

4.2 设置文件的访问权限

chmod a+x /etc/init.d/nginx   (a+x ==> all user can execute  所有用户可执行)

这样在控制台就很容易的操作nginx了:查看Nginx当前状态、启动Nginx、停止Nginx、重启Nginx…

如果修改了nginx的配置文件nginx.conf,也可以使用上面的命令重新加载新的配置文件并运行,可以将此命令加入到rc.local文件中,这样开机的时候nginx就默认启动了

4.3 加入到rc.local文件中

vi /etc/rc.local

加入一行 /etc/init.d/nginx start 保存并退出,下次重启会生效。

#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local

# nginx auto start
/etc/init.d/nginx start

Nginx应用-反向代理(Reverse Proxy)