Page 1 of 1

[FAQ] Возможность включения в nginx редиректа на HTTPS

Posted: Sat Sep 12, 2015 9:29 pm
by ykpon
1) В директорию /usr/local/vesta/bin/ добавляем файл v-change-web-domain-ssl-redirect с содержимым:
v-change-web-domain-ssl-redirectShow

Code: Select all

#!/bin/bash
# info: Change redirect ssl for domain
# options: USER DOMAIN SELECTEDSSL [RESTART]
#
# The function turns on SSL support for a domain. Parameter ssl_dir is a path
# to directory where 2 or 3 ssl files can be found. Certificate file 
# domain.tld.crt and its key domain.tld.key  are mandatory. Certificate
# authority domain.tld.ca file is optional. If home directory  parameter
# (ssl_home) is not set, https domain uses public_shtml as separate
# documentroot directory.


#----------------------------------------------------------#
#                    Variable&Function                     #
#----------------------------------------------------------#

# Argument defenition
user=$1
domain=$(idn -t --quiet -u "$2" )
domain_idn=$(idn -t --quiet -a "$domain")
selectedssl="$3"
restart="$4"

# Includes
source $VESTA/func/main.sh
source $VESTA/func/domain.sh
source $VESTA/func/ip.sh
source $VESTA/conf/vesta.conf

check_args '3' "$#" 'USER DOMAIN SELECTEDSSL [RESTART]'
validate_format 'user' 'domain' 'selectedssl'
is_system_enabled "$WEB_SYSTEM" 'WEB_SYSTEM'
is_object_valid 'user' 'USER' "$user"
is_object_unsuspended 'user' 'USER' "$user"
is_object_valid 'web' 'DOMAIN' "$domain"
is_object_unsuspended 'web' 'DOMAIN' "$domain"

conf="$HOMEDIR/$user/conf/web/nginx.conf"

getInc() {
        if grep -q '#include /etc/nginx/redirect.conf; #'$1 $2
		then exit
        else sed -i 's/include \/etc\/nginx\/redirect.conf; #'$1'/#include \/etc\/nginx\/redirect.conf; #'$1'/g' $2
        fi
}

if [ "$selectedssl" == 'yes' ]
then sed -i 's/#include \/etc\/nginx\/redirect.conf; #'$domain'/include \/etc\/nginx\/redirect.conf; #'$domain'/g' $conf
else getInc $domain $conf
fi

#if [ "$selectedssl" == 'yes' ]
#then
#sed -i 's/#include \/etc\/nginx\/redirect.conf; #'$domain'/include \/etc\/nginx\/redirect.conf; #'$domain'/g' $conf
#else
#sed -i 's/include \/etc\/nginx\/redirect.conf; #'$domain'/#include \/etc\/nginx\/redirect.conf; #'$domain'/g' $conf
#fi

chown root:$user $conf
chmod 640 $conf

#update_object_value 'web' 'DOMAIN' "$domain" 'SSL_REDIRECT' "$3"

add_object_key 'web' 'DOMAIN' "$domain" 'SSL_REDIRECT' 'TRUE'

# Restart web server
if [ "$restart" != 'no' ]; then
    $BIN/v-restart-web
    if [ $? -ne 0 ]; then
        exit $E_RESTART
    fi

    $BIN/v-restart-proxy
    if [ $? -ne 0 ]; then
        exit $E_RESTART
    fi
fi

# Logging
log_history "change ssl redirect for $domain"
log_event "$OK" "$EVENT"

exit
и устанавливаем на него права 770.
2) В файле /usr/local/vesta/web/edit/web/index.php находим строку:

Code: Select all

// Delete web stats
И перед ней добавляем:
/usr/local/vesta/web/edit/web/index.phpShow

Code: Select all

// Change redirect to https
	if (( $v_ssl == 'yes') && $_POST['v_ssl_redirect']=='yes' && (empty($_SESSION['error_msg']))) {
		exec(VESTA_CMD."v-change-web-domain-ssl-redirect ".$user." ".$v_domain." yes yes", $output, $return_var);
		check_return_code($return_var,$output);
		unset($output);
	}
	else
	if (( $v_ssl == 'yes') && $_POST['v_ssl_redirect']=='no' && (empty($_SESSION['error_msg']))) {
		exec(VESTA_CMD."v-change-web-domain-ssl-redirect ".$user." ".$v_domain." no yes", $output, $return_var);
		check_return_code($return_var,$output);
		unset($output);
	}
3) В файлах /usr/local/vesta/web/templates/admin/edit_web.html и /usr/local/vesta/web/templates/user/edit_web.html находим строки:
edit_web.htmlShow

Code: Select all

<tr>
                                            <td>
                                                <textarea size="20" class="vst-textinput" name="v_ssl_ca"><?php if (!empty($v_ssl_ca)) echo htmlentities($v_ssl_ca); ?></textarea>
                                            </td>
                                        </tr>
И после нее (после </tr> и до </table>) добавляем код:
edit_web.htmlShow

Code: Select all

<tr>
                                            <td class="vst-text input-label">
                                                <?php print __('Redirect from HTTP to HTTPS');?>
                                            </td>
                                        </tr>
										<tr>
											<td>
												<select class="vst-list" name="v_ssl_redirect">
													<option selected></option>
                                                    <option value='yes'>
                                                         Enable
                                                    </option>
                                                    <option value='no'>
                                                        Disable
                                                    </option>
                                                </select>
											</td>
										</tr>
4) В папке /etc/nginx/ создаем файл redirect.conf с содержимым:
/etc/nginx/redirect.confShow

Code: Select all

if ($ssl_protocol = "") {
        rewrite ^/(.*) https://$server_name/$1 permanent;
}
5) В директории /usr/local/vesta/data/templates/web/nginx находим файлы caching.tpl, default.tpl, hosting.tpl, proxy_ip.tpl и после строки:

Code: Select all

[b]server_name %domain_idn% %alias_idn%;[/b]
либо

Code: Select all

server_name  _;
добавляем:

Code: Select all

#include /etc/nginx/redirect.conf; #%domain_idn%
6) В панели VestaCP необходимо выделить всех пользователей и выбрать действие "Rebuild".
источниг