Tomcat не может изменить порт на 80 [дублировать]

Когда ваши пути include разные

Ошибки компоновщика могут произойти, если заголовочный файл и связанная с ним общая библиотека (файл .lib) не синхронизируются. Позволь мне объяснить.

Как работают линкеры? Линкер соответствует объявлению функции (объявленному в заголовке) с его определением (в общей библиотеке) путем сравнения их подписи. Вы можете получить ошибку компоновщика, если компоновщик не найдет определение функции, которое идеально подходит.

Возможно ли получить ошибку компоновщика, даже если объявление и определение, похоже, совпадают? Да! Они могут выглядеть одинаково в исходном коде, но это действительно зависит от того, что видит компилятор. По сути, вы можете столкнуться с такой ситуацией:

// header1.h
typedef int Number;
void foo(Number);

// header2.h
typedef float Number;
void foo(Number); // this only looks the same lexically

Обратите внимание, что хотя обе декларации функций выглядят одинаково в исходном коде, но они действительно различаются в зависимости от компилятора.

Вы можете спросить, как это получается в такой ситуации? Включите пути, конечно! Если при компиляции разделяемой библиотеки путь include приводит к header1.h, и вы в конечном итоге используете header2.h в своей собственной программе, вы оставите царапины на своем заголовке, задаваясь вопросом, что произошло (каламбур).

Пример того, как это может произойти в реальном мире, объясняется ниже.

Дальнейшая разработка с примером

У меня есть два проекта: graphics.lib и main.exe. Оба проекта зависят от common_math.h. Предположим, что библиотека экспортирует следующую функцию:

// graphics.lib    
#include "common_math.h" 

void draw(vec3 p) { ... } // vec3 comes from common_math.h

И затем вы идете вперед и включаете библиотеку в свой собственный проект.

// main.exe
#include "other/common_math.h"
#include "graphics.h"

int main() {
    draw(...);
}

Boom! Вы получаете ошибку компоновщика, и вы понятия не имеете, почему она терпит неудачу. Причина в том, что общая библиотека использует разные версии одного и того же include common_math.h (я сделал это очевидным здесь в этом примере, включив другой путь, но это может быть не всегда так очевидно. Возможно, путь include отличается в настройки компилятора).

Обратите внимание, что в этом примере компоновщик сказал бы вам, что не смог найти draw(), когда на самом деле вы знаете, что он явно экспортируется библиотекой. Вы могли часами царапать себе голову, думая, что пошло не так. Дело в том, что компоновщик видит другую подпись, потому что типы параметров немного отличаются. В этом примере vec3 является другим типом в обоих проектах в отношении компилятора. Это может произойти из-за того, что они происходят из двух немного разных файлов include (возможно, включенные файлы поступают из двух разных версий библиотеки).

Отладка компоновщика

DUMPBIN - ваш друг, если вы используете Visual Studio. Я уверен, что другие компиляторы имеют другие подобные инструменты.

Процесс выглядит следующим образом:

  1. Обратите внимание на странное искаженное имя, указанное в ошибке компоновщика. (например, draw @ graphics @ XYZ).
  2. Выгрузите экспортированные символы из библиотеки в текстовый файл.
  3. Найдите экспортированный символ, представляющий интерес, и обратите внимание, что искаженное имя
  4. Обратите внимание на то, почему искаженные имена оказались разными. Вы могли бы видеть, что типы параметров различны, хотя они выглядят одинаково в исходном коде.
  5. Причина, почему они разные. В приведенном выше примере они различаются из-за разных файлов include.

[1] По проекту я имею в виду набор исходных файлов, которые связаны друг с другом для создания либо библиотеки, либо исполняемого файла .

РЕДАКТИРОВАТЬ 1: Переписать первый раздел, который будет легче понять. Пожалуйста, прокомментируйте ниже, чтобы сообщить мне, нужно ли что-то еще исправлять. Спасибо!

143
задан informatik01 25 October 2013 в 23:52
поделиться

15 ответов

1) Перейдите в папку conf в каталоге установки tomcat

 e.g. C:\Tomcat 6.0\conf\

2) Измените следующий тег в файле server.xml

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

3) Измените значение port=8080 на port=80

4) Сохраните файл.

5) Остановите Tomcat и перезапустите его.

206
ответ дан nicael 29 August 2018 в 02:57
поделиться

Я попытался изменить порт с 8080 на 80 в server.xml, но он не работал для меня. Затем я нашел альтернативу, обновил iptables, который, несомненно, влияет на производительность.

Я использую следующие команды:

sudo /sbin/iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
sudo /sbin/service iptables save

http: //www.excelsior-usa.com/articles/tomcat-amazon-ec2-advanced.html#port80

21
ответ дан Brant Olsen 29 August 2018 в 02:57
поделиться

В современном Linux лучший подход (для меня) заключается в использовании xinetd:

1) create /etc/xinet.d/tomcat-http

service http
{
        disable = no
        socket_type = stream
        user = root
        wait = no
        redirect = 127.0.0.1 8080
}

2) create /etc/xinet.d/tomcat-https

service https
{
        disable = no
        socket_type = stream
        user = root
        wait = no
        redirect = 127.0.0.1 8443
}

3) chkconfig xinetd on

4) /etc/init.d/xinetd start

6
ответ дан cgdave 29 August 2018 в 02:57
поделиться

1) Найдите server.xml в {папке установки Tomcat} \ conf \ 2) Найдите следующую аналогичную инструкцию

<!-- Define a non-SSL HTTP/1.1 Connector on port 8180 -->
    <Connector port="8080" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               connectionTimeout="20000" disableUploadTimeout="true" />

3) теперь измените порт = "---" (что вы хотите )

3
ответ дан madhu 29 August 2018 в 02:57
поделиться

Вот шаги:

-> Следуйте по пути: {каталог tomcat> / conf -> Найти эту строку:

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

изменить номер порта с "8080 "на" 80 ".

-> Сохранить файл.

-> Перезапустить сервер:)

1
ответ дан Madhusudan 29 August 2018 в 02:57
поделиться

В Linux на базе Debian (например, в Ubuntu) вы также должны пойти в /etc/default/tomcat7, раскомментировать строку #AUTHBIND=no и установить его значение в «да», чтобы сервер связывался с привилегированным портом .

104
ответ дан Marcel Korpel 29 August 2018 в 02:57
поделиться

Работа с приведенной ниже командой. Пробовал менять server.xml и файл conf, но оба они не работали.

/ sbin / iptables -A INPUT -i eth0 -p tcp -dport 80 -j ACCEPT

/ sbin / iptables -A INPUT -i eth0 -p tcp --dport 8080 -j ACCEPT

/ sbin / iptables -A PREROUTING -t nat -i eth0 -p tcp -dport 80 -j REDIRECT -to-port 8080

4
ответ дан Naeem Iqbal 29 August 2018 в 02:57
поделиться

На сервере Linux вы можете просто использовать эти команды для перенастройки Tomcat для прослушивания на порту 80:

sed -i 's|port="8080"|port="80"|g' /etc/tomcat?/server.xml
sed -i 's|#AUTHBIND=no|AUTHBIND=yes|g' /etc/default/tomcat?
service tomcat8 restart
1
ответ дан panticz.de 29 August 2018 в 02:57
поделиться

В системах Ubuntu и Debian необходимо выполнить несколько шагов:

  1. В server.xml измените строку <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/> на port="80".
  2. Установите рекомендуемый (не обязательно) пакет authbind с командой: sudo apt-get install authbind
  3. Включить authbind в файле server.xml (либо в /etc/tomcat6, либо /etc/tomcat7), раскомментируя и установив строку как : AUTHBIND=yes

Необходимы все три шага.

27
ответ дан Peter N. Steinmetz 29 August 2018 в 02:57
поделиться

Просто перейдите в папку conf из tomcat

откройте файл server.xml

Откройте один из узлов соединителя, который выглядит следующим образом:

<Connector port="8080" protocol="HTTP/1.1" 
           connectionTimeout="20000" 
           redirectPort="8443" />

Просто замените порт

сохранить и перезапустить tomcat

1
ответ дан ravi ranjan 29 August 2018 в 02:57
поделиться

Ubuntu 14.04 LTS, в Amazon EC2. Следующие шаги разрешили эту проблему для меня:

1. Измените server.xml и измените порт = "8080" на "80"

sudo vi /var/lib/tomcat7/conf/server.xml

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

2. Редактировать файл tomcat7

sudo vi /etc/default/tomcat7

раскомментировать и изменить # AUTHBIND = нет для да

3. Установить authbind

sudo apt-get install authbind

4. Выполните следующие команды, чтобы обеспечить чтение и выполнение tomcat7 на порту 80.

sudo touch /etc/authbind/byport/80
sudo chmod 500 /etc/authbind/byport/80
sudo chown tomcat7 /etc/authbind/byport/80

5. Перезапустить tomcat:

sudo /etc/init.d/tomcat7 restart
107
ответ дан Rose 29 August 2018 в 02:57
поделиться

Если кто-то ищет, как изменить номер порта tomcat в Eclipse IDE, выполните следующие действия.

1. В представлении «Серверы» дважды щелкните имя сервера:

2.Что откроет страницу конфигурации для Tomcat следующим образом:

3.Некоторые номера портов показаны в таблице на правильно. Нажмите, чтобы изменить, например:

4.Что изменит номер порта для HTTP с 8080 до 80. Нажмите Ctrl + S, чтобы сохранить изменения и перезапустить сервер. Мы можем определить изменение номера порта в представлении «Консоль»:

Это все содержимое было взято из приведенной ниже ссылки, пожалуйста, обратитесь к этой ссылке для получения дополнительной информации. http://www.codejava.net/servers/tomcat/how-to-change-port-numbers-for-tomcat-in-eclipse

5
ответ дан Shanaka Kuruwita 29 August 2018 в 02:57
поделиться

Поскольку предыдущие ответы не работали хорошо (это было хорошо, но недостаточно) для меня на сервере 14.04 Ubuntu, я упоминаю эти рекомендации (это цитата).

Редактировать: обратите внимание, что как @ jason-faust упомянул об этом в комментариях, в 14.04, пакет authbind, который поставляется с ним, теперь поддерживает IPv6, поэтому предпочтение IPv4 не является потребовалось больше .

1) Install authbind
2) Make port 80 available to authbind (you need to be root):

  touch /etc/authbind/byport/80
  chmod 500 /etc/authbind/byport/80
  chown tomcat7 /etc/authbind/byport/80

3) Make IPv4 the default (authbind does not currently support IPv6).
   To do so, create the file TOMCAT/bin/setenv.sh with the following content: 

   CATALINA_OPTS="-Djava.net.preferIPv4Stack=true"

4) Change /usr/share/tomcat7/bin/startup.sh

  exec authbind --deep "$PRGDIR"/"$EXECUTABLE" start "$@"
  # OLD: exec "$PRGDIR"/"$EXECUTABLE" start "$@"

Если у вас уже есть файл setenv.sh в /usr/share/tomcat7/bin с CATALINA_OPTS, вы должны использовать:

export CATALINA_OPTS="$CATALINA_OPTS -Djava.net.preferIPv4Stack=true"

Теперь вы можете изменить порт на 80, как сказано в других ответах.

16
ответ дан smonff 29 August 2018 в 02:57
поделиться

Не забудьте отредактировать файл. Откройте файл /etc/default/tomcat7 и измените

#AUTHBIND=no

на

AUTHBIND=yes

, затем перезапустите.

0
ответ дан Undo 29 August 2018 в 02:57
поделиться

, если вы используете eclipse и модифицируете server.xml, не работает для вас, попробуйте выполнить статью .. У них есть шаги для изменения порта, если вы используете IDE, например eclipse.

2
ответ дан user3461044 29 August 2018 в 02:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: